diff options
author | beck <> | 2002-05-15 02:29:21 +0000 |
---|---|---|
committer | beck <> | 2002-05-15 02:29:21 +0000 |
commit | b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch) | |
tree | fa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libcrypto/asn1/p8_pkey.c | |
parent | e471e1ea98d673597b182ea85f29e30c97cd08b5 (diff) | |
download | openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2 openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip |
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to 'src/lib/libcrypto/asn1/p8_pkey.c')
-rw-r--r-- | src/lib/libcrypto/asn1/p8_pkey.c | 79 |
1 files changed, 18 insertions, 61 deletions
diff --git a/src/lib/libcrypto/asn1/p8_pkey.c b/src/lib/libcrypto/asn1/p8_pkey.c index fa6cbfb6f8..b634d5bc85 100644 --- a/src/lib/libcrypto/asn1/p8_pkey.c +++ b/src/lib/libcrypto/asn1/p8_pkey.c | |||
@@ -58,70 +58,27 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include <openssl/asn1_mac.h> | 61 | #include <openssl/asn1t.h> |
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | 63 | ||
64 | int i2d_PKCS8_PRIV_KEY_INFO (PKCS8_PRIV_KEY_INFO *a, unsigned char **pp) | 64 | /* Minor tweak to operation: zero private key data */ |
65 | static int pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
65 | { | 66 | { |
66 | 67 | /* Since the structure must still be valid use ASN1_OP_FREE_PRE */ | |
67 | M_ASN1_I2D_vars(a); | 68 | if(operation == ASN1_OP_FREE_PRE) { |
68 | 69 | PKCS8_PRIV_KEY_INFO *key = (PKCS8_PRIV_KEY_INFO *)*pval; | |
69 | M_ASN1_I2D_len (a->version, i2d_ASN1_INTEGER); | 70 | if (key->pkey->value.octet_string) |
70 | M_ASN1_I2D_len (a->pkeyalg, i2d_X509_ALGOR); | 71 | memset(key->pkey->value.octet_string->data, |
71 | M_ASN1_I2D_len (a->pkey, i2d_ASN1_TYPE); | 72 | 0, key->pkey->value.octet_string->length); |
72 | M_ASN1_I2D_len_IMP_SET_opt_type (X509_ATTRIBUTE, a->attributes, | 73 | } |
73 | i2d_X509_ATTRIBUTE, 0); | 74 | return 1; |
74 | |||
75 | M_ASN1_I2D_seq_total (); | ||
76 | |||
77 | M_ASN1_I2D_put (a->version, i2d_ASN1_INTEGER); | ||
78 | M_ASN1_I2D_put (a->pkeyalg, i2d_X509_ALGOR); | ||
79 | M_ASN1_I2D_put (a->pkey, i2d_ASN1_TYPE); | ||
80 | M_ASN1_I2D_put_IMP_SET_opt_type (X509_ATTRIBUTE, a->attributes, | ||
81 | i2d_X509_ATTRIBUTE, 0); | ||
82 | |||
83 | M_ASN1_I2D_finish(); | ||
84 | } | 75 | } |
85 | 76 | ||
86 | PKCS8_PRIV_KEY_INFO *PKCS8_PRIV_KEY_INFO_new(void) | 77 | ASN1_SEQUENCE_cb(PKCS8_PRIV_KEY_INFO, pkey_cb) = { |
87 | { | 78 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, version, ASN1_INTEGER), |
88 | PKCS8_PRIV_KEY_INFO *ret=NULL; | 79 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkeyalg, X509_ALGOR), |
89 | ASN1_CTX c; | 80 | ASN1_SIMPLE(PKCS8_PRIV_KEY_INFO, pkey, ASN1_ANY), |
90 | M_ASN1_New_Malloc(ret, PKCS8_PRIV_KEY_INFO); | 81 | ASN1_IMP_SET_OF_OPT(PKCS8_PRIV_KEY_INFO, attributes, X509_ATTRIBUTE, 0) |
91 | M_ASN1_New (ret->version, M_ASN1_INTEGER_new); | 82 | } ASN1_SEQUENCE_END_cb(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) |
92 | M_ASN1_New (ret->pkeyalg, X509_ALGOR_new); | ||
93 | M_ASN1_New (ret->pkey, ASN1_TYPE_new); | ||
94 | ret->attributes = NULL; | ||
95 | ret->broken = PKCS8_OK; | ||
96 | return (ret); | ||
97 | M_ASN1_New_Error(ASN1_F_PKCS8_PRIV_KEY_INFO_NEW); | ||
98 | } | ||
99 | 83 | ||
100 | PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO(PKCS8_PRIV_KEY_INFO **a, | 84 | IMPLEMENT_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) |
101 | unsigned char **pp, long length) | ||
102 | { | ||
103 | M_ASN1_D2I_vars(a,PKCS8_PRIV_KEY_INFO *,PKCS8_PRIV_KEY_INFO_new); | ||
104 | M_ASN1_D2I_Init(); | ||
105 | M_ASN1_D2I_start_sequence(); | ||
106 | M_ASN1_D2I_get (ret->version, d2i_ASN1_INTEGER); | ||
107 | M_ASN1_D2I_get (ret->pkeyalg, d2i_X509_ALGOR); | ||
108 | M_ASN1_D2I_get (ret->pkey, d2i_ASN1_TYPE); | ||
109 | M_ASN1_D2I_get_IMP_set_opt_type(X509_ATTRIBUTE, ret->attributes, | ||
110 | d2i_X509_ATTRIBUTE, | ||
111 | X509_ATTRIBUTE_free, 0); | ||
112 | M_ASN1_D2I_Finish(a, PKCS8_PRIV_KEY_INFO_free, ASN1_F_D2I_PKCS8_PRIV_KEY_INFO); | ||
113 | } | ||
114 | |||
115 | void PKCS8_PRIV_KEY_INFO_free (PKCS8_PRIV_KEY_INFO *a) | ||
116 | { | ||
117 | if (a == NULL) return; | ||
118 | M_ASN1_INTEGER_free (a->version); | ||
119 | X509_ALGOR_free(a->pkeyalg); | ||
120 | /* Clear sensitive data */ | ||
121 | if (a->pkey->value.octet_string) | ||
122 | memset (a->pkey->value.octet_string->data, | ||
123 | 0, a->pkey->value.octet_string->length); | ||
124 | ASN1_TYPE_free (a->pkey); | ||
125 | sk_X509_ATTRIBUTE_pop_free (a->attributes, X509_ATTRIBUTE_free); | ||
126 | OPENSSL_free (a); | ||
127 | } | ||