diff --git a/src/misc/pem/pem_pkcs.c b/src/misc/pem/pem_pkcs.c index 5abf243f4..6a6d4e457 100644 --- a/src/misc/pem/pem_pkcs.c +++ b/src/misc/pem/pem_pkcs.c @@ -115,6 +115,7 @@ typedef int (*import_fn)(const unsigned char *, unsigned long, void*); static const import_fn s_import_openssl_fns[LTC_PKA_NUM] = { #ifdef LTC_MRSA [LTC_PKA_RSA] = (import_fn)rsa_import, + [LTC_PKA_RSA_PSS] = (import_fn)rsa_import, #endif #ifdef LTC_MDSA [LTC_PKA_DSA] = (import_fn)dsa_import, diff --git a/src/pk/asn1/der/general/der_encode_asn1_length.c b/src/pk/asn1/der/general/der_encode_asn1_length.c index 7892eea24..e5bf77d62 100644 --- a/src/pk/asn1/der/general/der_encode_asn1_length.c +++ b/src/pk/asn1/der/general/der_encode_asn1_length.c @@ -29,7 +29,7 @@ int der_encode_asn1_length(unsigned long len, unsigned char *out, unsigned long x >>= 8; } if (y == 0) { - return CRYPT_PK_ASN1_ERROR; + y = 1; /* len == 0 is valid: short form, single byte 0x00 */ } if (out == NULL) { diff --git a/tests/pem/pkcs/extra/zerolength.pem b/tests/pem/pkcs/extra/zerolength.pem new file mode 100644 index 000000000..e6d78fdea --- /dev/null +++ b/tests/pem/pkcs/extra/zerolength.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQowAAOCAQ8AMIIBCgKCAQEAvTHHoCaR0tlYfvapRv94 +hUTMrdSymIrWIIZ5Kmv5bIYWtK0TMX0icLkB0PzR2IDLj1L7hzBKUljBGzjf6ujf +Zwru5+odDZ344A6AhH5B5Zie1ALUTnizD+8XtWcdOtv4aF5NwgRJns0YY+HVr/KK +fPZurfMf7JI2wSCt0TRRUixkfJgypnLNZNMowcMiGD9GYdCb2mC43V8DKNpUIIIU +JK/auxqAxdEnY6GwI4zYnQdCv8ULai/LcB2CQhj5gm9PeKI6K1qkKs5/F1N2+2y9 +srrSk7pYPU0xxrj5Ap5GsTaJJJhV9QV1bgDiJaakWhh2m9jSs6SsufHCPT5RiCVh +5QIDAQAB +-----END PUBLIC KEY----- \ No newline at end of file