| OLD | NEW |
| 1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
| 2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 #include "lowkeyi.h" | 4 #include "lowkeyi.h" |
| 5 #include "secoid.h" | 5 #include "secoid.h" |
| 6 #include "secitem.h" | 6 #include "secitem.h" |
| 7 #include "secder.h" | 7 #include "secder.h" |
| 8 #include "base64.h" | 8 #include "base64.h" |
| 9 #include "secasn1.h" | 9 #include "secasn1.h" |
| 10 #include "secerr.h" | 10 #include "secerr.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 offsetof(NSSLOWKEYPrivateKeyInfo, attributes), | 46 offsetof(NSSLOWKEYPrivateKeyInfo, attributes), |
| 47 nsslowkey_SetOfAttributeTemplate }, | 47 nsslowkey_SetOfAttributeTemplate }, |
| 48 { 0 } | 48 { 0 } |
| 49 }; | 49 }; |
| 50 | 50 |
| 51 const SEC_ASN1Template nsslowkey_PQGParamsTemplate[] = { | 51 const SEC_ASN1Template nsslowkey_PQGParamsTemplate[] = { |
| 52 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(PQGParams) }, | 52 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(PQGParams) }, |
| 53 { SEC_ASN1_INTEGER, offsetof(PQGParams,prime) }, | 53 { SEC_ASN1_INTEGER, offsetof(PQGParams,prime) }, |
| 54 { SEC_ASN1_INTEGER, offsetof(PQGParams,subPrime) }, | 54 { SEC_ASN1_INTEGER, offsetof(PQGParams,subPrime) }, |
| 55 { SEC_ASN1_INTEGER, offsetof(PQGParams,base) }, | 55 { SEC_ASN1_INTEGER, offsetof(PQGParams,base) }, |
| 56 { 0, } | 56 { 0 } |
| 57 }; | 57 }; |
| 58 | 58 |
| 59 const SEC_ASN1Template nsslowkey_RSAPrivateKeyTemplate[] = { | 59 const SEC_ASN1Template nsslowkey_RSAPrivateKeyTemplate[] = { |
| 60 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, | 60 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, |
| 61 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.version) }, | 61 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.version) }, |
| 62 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.modulus) }, | 62 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.modulus) }, |
| 63 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.publicExponent) }, | 63 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.publicExponent) }, |
| 64 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.privateExponent) }, | 64 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.privateExponent) }, |
| 65 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.prime1) }, | 65 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.prime1) }, |
| 66 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.prime2) }, | 66 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.prime2) }, |
| 67 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.exponent1) }, | 67 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.exponent1) }, |
| 68 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.exponent2) }, | 68 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.exponent2) }, |
| 69 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.coefficient) }, | 69 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.rsa.coefficient) }, |
| 70 { 0 } | 70 { 0 } |
| 71 }; | 71 }; |
| 72 | 72 |
| 73 | 73 |
| 74 const SEC_ASN1Template nsslowkey_DSAPrivateKeyTemplate[] = { | 74 const SEC_ASN1Template nsslowkey_DSAPrivateKeyTemplate[] = { |
| 75 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, | 75 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, |
| 76 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dsa.publicValue) }, | 76 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dsa.publicValue) }, |
| 77 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dsa.privateValue) }, | 77 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dsa.privateValue) }, |
| 78 { 0, } | 78 { 0 } |
| 79 }; | 79 }; |
| 80 | 80 |
| 81 const SEC_ASN1Template nsslowkey_DSAPrivateKeyExportTemplate[] = { | 81 const SEC_ASN1Template nsslowkey_DSAPrivateKeyExportTemplate[] = { |
| 82 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dsa.privateValue) }, | 82 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dsa.privateValue) }, |
| 83 }; | 83 }; |
| 84 | 84 |
| 85 const SEC_ASN1Template nsslowkey_DHPrivateKeyTemplate[] = { | 85 const SEC_ASN1Template nsslowkey_DHPrivateKeyTemplate[] = { |
| 86 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, | 86 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, |
| 87 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.publicValue) }, | 87 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.publicValue) }, |
| 88 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.privateValue) }, | 88 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.privateValue) }, |
| 89 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.base) }, | 89 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.base) }, |
| 90 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.prime) }, | 90 { SEC_ASN1_INTEGER, offsetof(NSSLOWKEYPrivateKey,u.dh.prime) }, |
| 91 { 0, } | 91 { 0 } |
| 92 }; | 92 }; |
| 93 | 93 |
| 94 #ifndef NSS_DISABLE_ECC | 94 #ifndef NSS_DISABLE_ECC |
| 95 | 95 |
| 96 /* XXX This is just a placeholder for later when we support | 96 /* XXX This is just a placeholder for later when we support |
| 97 * generic curves and need full-blown support for parsing EC | 97 * generic curves and need full-blown support for parsing EC |
| 98 * parameters. For now, we only support named curves in which | 98 * parameters. For now, we only support named curves in which |
| 99 * EC params are simply encoded as an object ID and we don't | 99 * EC params are simply encoded as an object ID and we don't |
| 100 * use nsslowkey_ECParamsTemplate. | 100 * use nsslowkey_ECParamsTemplate. |
| 101 */ | 101 */ |
| 102 const SEC_ASN1Template nsslowkey_ECParamsTemplate[] = { | 102 const SEC_ASN1Template nsslowkey_ECParamsTemplate[] = { |
| 103 { SEC_ASN1_CHOICE, offsetof(ECParams,type), NULL, sizeof(ECParams) }, | 103 { SEC_ASN1_CHOICE, offsetof(ECParams,type), NULL, sizeof(ECParams) }, |
| 104 { SEC_ASN1_OBJECT_ID, offsetof(ECParams,curveOID), NULL, ec_params_named }, | 104 { SEC_ASN1_OBJECT_ID, offsetof(ECParams,curveOID), NULL, ec_params_named }, |
| 105 { 0, } | 105 { 0 } |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 | 108 |
| 109 /* NOTE: The SECG specification allows the private key structure | 109 /* NOTE: The SECG specification allows the private key structure |
| 110 * to contain curve parameters but recommends that they be stored | 110 * to contain curve parameters but recommends that they be stored |
| 111 * in the PrivateKeyAlgorithmIdentifier field of the PrivateKeyInfo | 111 * in the PrivateKeyAlgorithmIdentifier field of the PrivateKeyInfo |
| 112 * instead. | 112 * instead. |
| 113 */ | 113 */ |
| 114 const SEC_ASN1Template nsslowkey_ECPrivateKeyTemplate[] = { | 114 const SEC_ASN1Template nsslowkey_ECPrivateKeyTemplate[] = { |
| 115 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, | 115 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(NSSLOWKEYPrivateKey) }, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 131 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | | 131 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | |
| 132 SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC | 0, | 132 SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC | 0, |
| 133 offsetof(NSSLOWKEYPrivateKey,u.ec.ecParams), | 133 offsetof(NSSLOWKEYPrivateKey,u.ec.ecParams), |
| 134 nsslowkey_ECParamsTemplate }, | 134 nsslowkey_ECParamsTemplate }, |
| 135 #endif | 135 #endif |
| 136 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | | 136 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | |
| 137 SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC | | 137 SEC_ASN1_EXPLICIT | SEC_ASN1_CONTEXT_SPECIFIC | |
| 138 SEC_ASN1_XTRN | 1, | 138 SEC_ASN1_XTRN | 1, |
| 139 offsetof(NSSLOWKEYPrivateKey,u.ec.publicValue), | 139 offsetof(NSSLOWKEYPrivateKey,u.ec.publicValue), |
| 140 SEC_ASN1_SUB(SEC_BitStringTemplate) }, | 140 SEC_ASN1_SUB(SEC_BitStringTemplate) }, |
| 141 { 0, } | 141 { 0 } |
| 142 }; | 142 }; |
| 143 #endif /* NSS_DISABLE_ECC */ | 143 #endif /* NSS_DISABLE_ECC */ |
| 144 /* | 144 /* |
| 145 * See bugzilla bug 125359 | 145 * See bugzilla bug 125359 |
| 146 * Since NSS (via PKCS#11) wants to handle big integers as unsigned ints, | 146 * Since NSS (via PKCS#11) wants to handle big integers as unsigned ints, |
| 147 * all of the templates above that en/decode into integers must be converted | 147 * all of the templates above that en/decode into integers must be converted |
| 148 * from ASN.1's signed integer type. This is done by marking either the | 148 * from ASN.1's signed integer type. This is done by marking either the |
| 149 * source or destination (encoding or decoding, respectively) type as | 149 * source or destination (encoding or decoding, respectively) type as |
| 150 * siUnsignedInteger. | 150 * siUnsignedInteger. |
| 151 */ | 151 */ |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 | 483 |
| 484 loser: | 484 loser: |
| 485 | 485 |
| 486 if(rv != SECSuccess) { | 486 if(rv != SECSuccess) { |
| 487 PORT_FreeArena(poolp, PR_TRUE); | 487 PORT_FreeArena(poolp, PR_TRUE); |
| 488 returnKey = NULL; | 488 returnKey = NULL; |
| 489 } | 489 } |
| 490 | 490 |
| 491 return returnKey; | 491 return returnKey; |
| 492 } | 492 } |
| OLD | NEW |