Changeset View
Changeset View
Standalone View
Standalone View
agent/pksign.c
| Context not available. | |||||
| /* Encode a message digest for use with the EdDSA algorithm | /* Encode a message digest for use with the EdDSA algorithm | ||||
| (i.e. curve Ed25519). */ | (i.e. curve Ed25519). */ | ||||
| static gpg_error_t | static gpg_error_t | ||||
| do_encode_eddsa (const byte *md, size_t mdlen, gcry_sexp_t *r_hash) | do_encode_eddsa (size_t nbits, const byte *md, size_t mdlen, | ||||
| gcry_sexp_t *r_hash) | |||||
| { | { | ||||
| gpg_error_t err; | gpg_error_t err; | ||||
| gcry_sexp_t hash; | gcry_sexp_t hash; | ||||
| const char *fmt; | |||||
| if (nbits == 448) | |||||
| fmt = "(data(value %b))"; | |||||
| else | |||||
| fmt = "(data(flags eddsa)(hash-algo sha512)(value %b))"; | |||||
| *r_hash = NULL; | *r_hash = NULL; | ||||
| err = gcry_sexp_build (&hash, NULL, | err = gcry_sexp_build (&hash, NULL, fmt, (int)mdlen, md); | ||||
| "(data(flags eddsa)(hash-algo sha512)(value %b))", | |||||
| (int)mdlen, md); | |||||
| if (!err) | if (!err) | ||||
| *r_hash = hash; | *r_hash = hash; | ||||
| return err; | return err; | ||||
| Context not available. | |||||
| /* Put the hash into a sexp */ | /* Put the hash into a sexp */ | ||||
| if (algo == GCRY_PK_EDDSA) | if (algo == GCRY_PK_EDDSA) | ||||
| err = do_encode_eddsa (data, datalen, | err = do_encode_eddsa (gcry_pk_get_nbits (s_skey), data, datalen, | ||||
| &s_hash); | &s_hash); | ||||
| else if (ctrl->digest.algo == MD_USER_TLS_MD5SHA1) | else if (ctrl->digest.algo == MD_USER_TLS_MD5SHA1) | ||||
| err = do_encode_raw_pkcs1 (data, datalen, | err = do_encode_raw_pkcs1 (data, datalen, | ||||
| Context not available. | |||||