11 typedef unsigned int uint32;
13 typedef unsigned short uint16;
15 typedef unsigned char uint8;
16 typedef signed char int8;
23 class PrivateKeyInfoCodec {
27 static const uint8 kRsaAlgorithmIdentifier[];
30 static const uint8 kBitStringTag = 0x03;
31 static const uint8 kIntegerTag = 0x02;
32 static const uint8 kNullTag = 0x05;
33 static const uint8 kOctetStringTag = 0x04;
34 static const uint8 kSequenceTag = 0x30;
40 explicit PrivateKeyInfoCodec(
bool big_endian);
42 ~PrivateKeyInfoCodec();
46 bool Export(std::vector<uint8>* output);
50 bool ExportPublicKeyInfo(std::vector<uint8>* output);
54 bool ExportPublicKey(std::vector<uint8>* output);
60 bool Import(
const std::vector<uint8>& input);
63 std::vector<uint8>* modulus() {
return &modulus_; };
64 std::vector<uint8>* public_exponent() {
return &public_exponent_; };
65 std::vector<uint8>* private_exponent() {
return &private_exponent_; };
66 std::vector<uint8>* prime1() {
return &prime1_; };
67 std::vector<uint8>* prime2() {
return &prime2_; };
68 std::vector<uint8>* exponent1() {
return &exponent1_; };
69 std::vector<uint8>* exponent2() {
return &exponent2_; };
70 std::vector<uint8>* coefficient() {
return &coefficient_; };
75 void PrependInteger(
const std::vector<uint8>& in, std::list<uint8>* out);
76 void PrependInteger(uint8* val,
int num_bytes, std::list<uint8>* data);
80 void PrependIntegerImpl(uint8* val,
82 std::list<uint8>* data,
87 bool ReadInteger(uint8** pos, uint8* end, std::vector<uint8>* out);
88 bool ReadIntegerWithExpectedSize(uint8** pos,
91 std::vector<uint8>* out);
95 bool ReadIntegerImpl(uint8** pos,
97 std::vector<uint8>* out,
102 void PrependBytes(uint8* val,
105 std::list<uint8>* data);
108 void PrependLength(
size_t size, std::list<uint8>* data);
111 void PrependTypeHeaderAndLength(uint8 type,
113 std::list<uint8>* output);
116 void PrependBitString(uint8* val,
int num_bytes, std::list<uint8>* output);
120 bool ReadLength(uint8** pos, uint8* end, uint32* result);
123 bool ReadTypeHeaderAndLength(uint8** pos,
130 bool ReadSequence(uint8** pos, uint8* end);
133 bool ReadAlgorithmIdentifier(uint8** pos, uint8* end);
136 bool ReadVersion(uint8** pos, uint8* end);
142 std::vector<uint8> modulus_;
143 std::vector<uint8> public_exponent_;
144 std::vector<uint8> private_exponent_;
145 std::vector<uint8> prime1_;
146 std::vector<uint8> prime2_;
147 std::vector<uint8> exponent1_;
148 std::vector<uint8> exponent2_;
149 std::vector<uint8> coefficient_;