~ubuntu-branches/debian/sid/botan/sid

« back to all changes in this revision

Viewing changes to src/lib/pubkey/eckcdsa/eckcdsa.h

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2018-03-01 22:23:25 UTC
  • mfrom: (1.2.2)
  • Revision ID: package-import@ubuntu.com-20180301222325-7p7vc45gu3hta34d
Tags: 2.4.0-2
* Don't remove .doctrees from the manual if it doesn't exist.
* Don't specify parallel to debhelper.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
* ECKCDSA (ISO/IEC 14888-3:2006/Cor.2:2009)
 
3
* (C) 2016 René Korthaus, Sirrix AG
 
4
*
 
5
* Botan is released under the Simplified BSD License (see license.txt)
 
6
*/
 
7
 
 
8
#ifndef BOTAN_ECKCDSA_KEY_H_
 
9
#define BOTAN_ECKCDSA_KEY_H_
 
10
 
 
11
#include <botan/ecc_key.h>
 
12
 
 
13
namespace Botan {
 
14
 
 
15
/**
 
16
* This class represents ECKCDSA public keys.
 
17
*/
 
18
class BOTAN_PUBLIC_API(2,0) ECKCDSA_PublicKey : public virtual EC_PublicKey
 
19
   {
 
20
   public:
 
21
 
 
22
      /**
 
23
      * Construct a public key from a given public point.
 
24
      * @param dom_par the domain parameters associated with this key
 
25
      * @param public_point the public point defining this key
 
26
      */
 
27
      ECKCDSA_PublicKey(const EC_Group& dom_par,
 
28
                      const PointGFp& public_point) :
 
29
         EC_PublicKey(dom_par, public_point) {}
 
30
 
 
31
      /**
 
32
      * Load a public key.
 
33
      * @param alg_id the X.509 algorithm identifier
 
34
      * @param key_bits DER encoded public key bits
 
35
      */
 
36
      ECKCDSA_PublicKey(const AlgorithmIdentifier& alg_id,
 
37
                      const std::vector<uint8_t>& key_bits) :
 
38
         EC_PublicKey(alg_id, key_bits) {}
 
39
 
 
40
      /**
 
41
      * Get this keys algorithm name.
 
42
      * @result this keys algorithm name ("ECGDSA")
 
43
      */
 
44
      std::string algo_name() const override { return "ECKCDSA"; }
 
45
 
 
46
      size_t message_parts() const override { return 2; }
 
47
 
 
48
      size_t message_part_size() const override
 
49
         { return domain().get_order().bytes(); }
 
50
 
 
51
      std::unique_ptr<PK_Ops::Verification>
 
52
         create_verification_op(const std::string& params,
 
53
                                const std::string& provider) const override;
 
54
   protected:
 
55
      ECKCDSA_PublicKey() = default;
 
56
   };
 
57
 
 
58
/**
 
59
* This class represents ECKCDSA private keys.
 
60
*/
 
61
class BOTAN_PUBLIC_API(2,0) ECKCDSA_PrivateKey final : public ECKCDSA_PublicKey,
 
62
                                    public EC_PrivateKey
 
63
   {
 
64
   public:
 
65
 
 
66
      /**
 
67
      * Load a private key.
 
68
      * @param alg_id the X.509 algorithm identifier
 
69
      * @param key_bits ECPrivateKey bits
 
70
      */
 
71
      ECKCDSA_PrivateKey(const AlgorithmIdentifier& alg_id,
 
72
                       const secure_vector<uint8_t>& key_bits) :
 
73
         EC_PrivateKey(alg_id, key_bits, true) {}
 
74
 
 
75
      /**
 
76
      * Create a private key.
 
77
      * @param rng a random number generator
 
78
      * @param domain parameters to used for this key
 
79
      * @param x the private key (if zero, generate a new random key)
 
80
      */
 
81
      ECKCDSA_PrivateKey(RandomNumberGenerator& rng,
 
82
                       const EC_Group& domain,
 
83
                       const BigInt& x = 0) :
 
84
         EC_PrivateKey(rng, domain, x, true) {}
 
85
 
 
86
      bool check_key(RandomNumberGenerator& rng, bool) const override;
 
87
 
 
88
      std::unique_ptr<PK_Ops::Signature>
 
89
         create_signature_op(RandomNumberGenerator& rng,
 
90
                             const std::string& params,
 
91
                             const std::string& provider) const override;
 
92
   };
 
93
 
 
94
}
 
95
 
 
96
#endif