@@ -44,31 +44,31 @@ stse_ReturnCode_t stse_certificate_verify_cert_signature(const stse_certificate_
4444 digestPtr = (PLAT_UI8 * )child -> tbs ;
4545 digestSize = child -> tbsSize ;
4646 ret = STSE_OK ;
47- }
47+ }
4848#ifdef STSE_CONF_USE_COMPANION
49- else if (stsafe_x509_parser_companion_handler != NULL &&
50- stsafe_x509_parser_companion_handler -> device_type == STSAFE_A120
49+ else if (stsafe_x509_parser_companion_handler != NULL &&
50+ stsafe_x509_parser_companion_handler -> device_type == STSAFE_A120
5151#ifdef STSE_CONF_HASH_SHA_256
52- & & hash_algo >= STSE_SHA_256
53- #endif
54- ){ /* Only STSAFE-A120 support Hash features */
55- ret = stse_compute_hash (stsafe_x509_parser_companion_handler , hash_algo ,
56- (PLAT_UI8 * )child -> tbs , child -> tbsSize , digestPtr ,
57- (PLAT_UI16 * )& digestSize );
58- }
59- #endif
60- else {
61- ret = stse_platform_hash_compute (hash_algo , (PLAT_UI8 * )child -> tbs , child -> tbsSize ,
62- digestPtr , & digestSize );
63- }
64-
65- if (ret != STSE_OK ) {
66- return (ret );
67- }
68-
69- return (stse_certificate_verify_signature (parent , digestPtr , digestSize , child -> Sign .pR ,
70- child -> Sign .rSize , child -> Sign .pS ,
71- child -> Sign .sSize ));
52+ & & hash_algo >= STSE_SHA_256
53+ #endif
54+ ) { /* Only STSAFE-A120 support Hash features */
55+ ret = stse_compute_hash (stsafe_x509_parser_companion_handler , hash_algo ,
56+ (PLAT_UI8 * )child -> tbs , child -> tbsSize , digestPtr ,
57+ (PLAT_UI16 * )& digestSize );
58+ }
59+ #endif
60+ else {
61+ ret = stse_platform_hash_compute (hash_algo , (PLAT_UI8 * )child -> tbs , child -> tbsSize ,
62+ digestPtr , & digestSize );
63+ }
64+
65+ if (ret != STSE_OK ) {
66+ return (ret );
67+ }
68+
69+ return (stse_certificate_verify_signature (parent , digestPtr , digestSize , child -> Sign .pR ,
70+ child -> Sign .rSize , child -> Sign .pS ,
71+ child -> Sign .sSize ));
7272}
7373
7474stse_ReturnCode_t stse_certificate_verify_signature (const stse_certificate_t * cert ,
@@ -78,150 +78,150 @@ stse_ReturnCode_t stse_certificate_verify_signature(const stse_certificate_t *ce
7878 PLAT_I32 signatureRsize ,
7979 const PLAT_UI8 * signatureS ,
8080 PLAT_I32 signatureSsize ) {
81- (void )signatureRsize ;
82- (void )signatureSsize ;
83- stse_ReturnCode_t ret ;
84- stse_ecc_key_type_t key_type ;
81+ (void )signatureRsize ;
82+ (void )signatureSsize ;
83+ stse_ReturnCode_t ret ;
84+ stse_ecc_key_type_t key_type ;
8585
86- if ((cert == NULL ) || (digest == NULL ) || (signatureR == NULL ) || (signatureS == NULL )) {
87- return (STSE_CERT_INVALID_PARAMETER );
88- }
86+ if ((cert == NULL ) || (digest == NULL ) || (signatureR == NULL ) || (signatureS == NULL )) {
87+ return (STSE_CERT_INVALID_PARAMETER );
88+ }
8989
90- key_type = stse_certificate_get_key_type (cert );
91- if (key_type == STSE_ECC_KT_INVALID ) {
92- return (STSE_CERT_INVALID_CERTIFICATE );
93- }
90+ key_type = stse_certificate_get_key_type (cert );
91+ if (key_type == STSE_ECC_KT_INVALID ) {
92+ return (STSE_CERT_INVALID_CERTIFICATE );
93+ }
9494
95- PLAT_UI8 pub_key_size = stse_ecc_info_table [key_type ].public_key_size ;
96- PLAT_UI8 pub_key [pub_key_size ];
97- PLAT_UI8 signature_size = stse_ecc_info_table [key_type ].signature_size ;
98- PLAT_UI8 signature [signature_size ];
95+ PLAT_UI8 pub_key_size = stse_ecc_info_table [key_type ].public_key_size ;
96+ PLAT_UI8 pub_key [pub_key_size ];
97+ PLAT_UI8 signature_size = stse_ecc_info_table [key_type ].signature_size ;
98+ PLAT_UI8 signature [signature_size ];
9999#ifdef STSE_CONF_USE_COMPANION
100- PLAT_UI8 signature_validity ;
100+ PLAT_UI8 signature_validity ;
101101#endif
102102
103- /* Extract and format the public key from the certificate */
104- if (cert -> SignatureAlgorithm == SIG_EDDSA_ED25519 ) {
105- memcpy (pub_key , cert -> PubKey .pX , pub_key_size );
103+ /* Extract and format the public key from the certificate */
104+ if (cert -> SignatureAlgorithm == SIG_EDDSA_ED25519 ) {
105+ memcpy (pub_key , cert -> PubKey .pX , pub_key_size );
106+ } else {
107+ memcpy (pub_key , cert -> PubKey .pX , (pub_key_size >> 1 ));
108+ if (* cert -> pPubKey_point_representation_id == 0x04 ) {
109+ memcpy (pub_key + (pub_key_size >> 1 ), cert -> PubKey .pY , (pub_key_size >> 1 ));
106110 } else {
107- memcpy (pub_key , cert -> PubKey .pX , (pub_key_size >> 1 ));
108- if (* cert -> pPubKey_point_representation_id == 0x04 ) {
109- memcpy (pub_key + (pub_key_size >> 1 ), cert -> PubKey .pY , (pub_key_size >> 1 ));
110- } else {
111111#ifdef STSE_CONF_USE_COMPANION
112- if (stsafe_x509_parser_companion_handler != NULL ) {
113- stsafea_ecc_decompress_public_key (
114- stsafe_x509_parser_companion_handler ,
115- key_type ,
116- * cert -> pPubKey_point_representation_id ,
117- pub_key ,
118- pub_key + (pub_key_size >> 1 ));
119- } else
120- #endif
121- {
122- return STSE_CERT_UNSUPPORTED_FEATURE ;
123- }
112+ if (stsafe_x509_parser_companion_handler != NULL ) {
113+ stsafea_ecc_decompress_public_key (
114+ stsafe_x509_parser_companion_handler ,
115+ key_type ,
116+ * cert -> pPubKey_point_representation_id ,
117+ pub_key ,
118+ pub_key + (pub_key_size >> 1 ));
119+ } else
120+ #endif
121+ {
122+ return STSE_CERT_UNSUPPORTED_FEATURE ;
124123 }
125124 }
125+ }
126126
127- /* Format the signature */
128- memcpy (signature , signatureR , (signature_size >> 1 ));
129- memcpy (signature + (signature_size >> 1 ), signatureS , (signature_size >> 1 ));
127+ /* Format the signature */
128+ memcpy (signature , signatureR , (signature_size >> 1 ));
129+ memcpy (signature + (signature_size >> 1 ), signatureS , (signature_size >> 1 ));
130130
131131#ifdef STSE_CONF_USE_COMPANION
132- if (stsafe_x509_parser_companion_handler != NULL ) {
133- /* Verify the signature using STSAFE */
134- ret = stse_ecc_verify_signature (
135- stsafe_x509_parser_companion_handler ,
136- key_type ,
137- pub_key ,
138- signature ,
139- (PLAT_UI8 * )digest ,
140- (PLAT_UI16 )digestSize ,
141- 1 , /* Message is hashed */
142- & signature_validity );
143-
144- if ((ret == STSE_OK ) && (signature_validity == 1 )) {
145- return (STSE_OK );
146- }
147- } else
148- #endif
149- {
150- ret = stse_platform_ecc_verify (
151- key_type ,
152- pub_key ,
153- (PLAT_UI8 * )digest ,
154- (PLAT_UI16 )digestSize ,
155- signature );
156-
157- if (ret == STSE_OK ) {
158- return (STSE_OK );
159- }
132+ if (stsafe_x509_parser_companion_handler != NULL ) {
133+ /* Verify the signature using STSAFE */
134+ ret = stse_ecc_verify_signature (
135+ stsafe_x509_parser_companion_handler ,
136+ key_type ,
137+ pub_key ,
138+ signature ,
139+ (PLAT_UI8 * )digest ,
140+ (PLAT_UI16 )digestSize ,
141+ 1 , /* Message is hashed */
142+ & signature_validity );
143+
144+ if ((ret == STSE_OK ) && (signature_validity == 1 )) {
145+ return (STSE_OK );
160146 }
147+ } else
148+ #endif
149+ {
150+ ret = stse_platform_ecc_verify (
151+ key_type ,
152+ pub_key ,
153+ (PLAT_UI8 * )digest ,
154+ (PLAT_UI16 )digestSize ,
155+ signature );
156+
157+ if (ret == STSE_OK ) {
158+ return (STSE_OK );
159+ }
160+ }
161161
162- return (STSE_CERT_INVALID_SIGNATURE );
162+ return (STSE_CERT_INVALID_SIGNATURE );
163163}
164164
165165stse_ecc_key_type_t stse_certificate_get_key_type (const stse_certificate_t * cert ) {
166- switch (cert -> EllipticCurve ) {
166+ switch (cert -> EllipticCurve ) {
167167#ifdef STSE_CONF_ECC_NIST_P_256
168- case EC_P256 :
169- return STSE_ECC_KT_NIST_P_256 ;
168+ case EC_P256 :
169+ return STSE_ECC_KT_NIST_P_256 ;
170170#endif
171171#ifdef STSE_CONF_ECC_NIST_P_384
172- case EC_P384 :
173- return STSE_ECC_KT_NIST_P_384 ;
172+ case EC_P384 :
173+ return STSE_ECC_KT_NIST_P_384 ;
174174#endif
175175#ifdef STSE_CONF_ECC_NIST_P_521
176- case EC_P521 :
177- return STSE_ECC_KT_NIST_P_521 ;
176+ case EC_P521 :
177+ return STSE_ECC_KT_NIST_P_521 ;
178178#endif
179179#ifdef STSE_CONF_ECC_BRAINPOOL_P_256
180- case EC_bp256r1 :
181- return STSE_ECC_KT_BP_P_256 ;
180+ case EC_bp256r1 :
181+ return STSE_ECC_KT_BP_P_256 ;
182182#endif
183183#ifdef STSE_CONF_ECC_BRAINPOOL_P_384
184- case EC_bp384r1 :
185- return STSE_ECC_KT_BP_P_384 ;
184+ case EC_bp384r1 :
185+ return STSE_ECC_KT_BP_P_384 ;
186186#endif
187187#ifdef STSE_CONF_ECC_BRAINPOOL_P_512
188- case EC_bp512r1 :
189- return STSE_ECC_KT_BP_P_512 ;
188+ case EC_bp512r1 :
189+ return STSE_ECC_KT_BP_P_512 ;
190190#endif
191191#ifdef STSE_CONF_ECC_EDWARD_25519
192- case EC_Ed25519 :
193- return STSE_ECC_KT_ED25519 ;
192+ case EC_Ed25519 :
193+ return STSE_ECC_KT_ED25519 ;
194194#endif
195- default :
196- return STSE_ECC_KT_INVALID ;
197- }
195+ default :
196+ return STSE_ECC_KT_INVALID ;
197+ }
198198}
199199
200200stse_hash_algorithm_t stse_certificate_get_sig_hash_algo (const stse_certificate_t * cert ) {
201- switch (cert -> SignatureAlgorithm ) {
201+ switch (cert -> SignatureAlgorithm ) {
202202#ifdef STSE_CONF_HASH_SHA_1
203- case SIG_ECDSA_SHA1 :
204- return STSE_SHA_1 ;
203+ case SIG_ECDSA_SHA1 :
204+ return STSE_SHA_1 ;
205205#endif
206206#ifdef STSE_CONF_HASH_SHA_224
207- case SIG_ECDSA_SHA224 :
208- return STSE_SHA_224 ;
207+ case SIG_ECDSA_SHA224 :
208+ return STSE_SHA_224 ;
209209#endif
210210#ifdef STSE_CONF_HASH_SHA_256
211- case SIG_ECDSA_SHA256 :
212- return STSE_SHA_256 ;
213- case SIG_EDDSA_ED25519 :
214- return STSE_SHA_256 ;
211+ case SIG_ECDSA_SHA256 :
212+ return STSE_SHA_256 ;
213+ case SIG_EDDSA_ED25519 :
214+ return STSE_SHA_256 ;
215215#endif
216216#ifdef STSE_CONF_HASH_SHA_384
217- case SIG_ECDSA_SHA384 :
218- return STSE_SHA_384 ;
217+ case SIG_ECDSA_SHA384 :
218+ return STSE_SHA_384 ;
219219#endif
220220#ifdef STSE_CONF_HASH_SHA_512
221- case SIG_ECDSA_SHA512 :
222- return STSE_SHA_512 ;
221+ case SIG_ECDSA_SHA512 :
222+ return STSE_SHA_512 ;
223223#endif
224- default :
225- return STSE_SHA_INVALID ;
226- }
224+ default :
225+ return STSE_SHA_INVALID ;
226+ }
227227}
0 commit comments