Latest update.
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
SUBDIRS=der
|
||||
|
||||
SOURCE[../libcommon.a]=provider_err.c bio_prov.c
|
||||
$FIPSCOMMON=provider_util.c
|
||||
SOURCE[../libnonfips.a]=$FIPSCOMMON nid_to_name.c
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from RFC 3279, 3 ASN.1 Module
|
||||
-- (https://www.rfc-editor.org/rfc/rfc3279.html#section-3)
|
||||
|
||||
-- OID for DSA public key
|
||||
|
||||
id-dsa OBJECT IDENTIFIER ::= {
|
||||
iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }
|
||||
|
||||
-- OID for DSA signature generated with SHA-1 hash
|
||||
|
||||
id-dsa-with-sha1 OBJECT IDENTIFIER ::= {
|
||||
iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }
|
||||
|
||||
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration
|
||||
|
||||
sigAlgs OBJECT IDENTIFIER ::= { 2 16 840 1 101 3 4 3 }
|
||||
|
||||
id-dsa-with-sha224 OBJECT IDENTIFIER ::= { sigAlgs 1 }
|
||||
id-dsa-with-sha256 OBJECT IDENTIFIER ::= { sigAlgs 2 }
|
||||
id-dsa-with-sha384 OBJECT IDENTIFIER ::= { sigAlgs 3 }
|
||||
id-dsa-with-sha512 OBJECT IDENTIFIER ::= { sigAlgs 4 }
|
||||
|
||||
id-dsa-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 5 }
|
||||
id-dsa-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 6 }
|
||||
id-dsa-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 7 }
|
||||
id-dsa-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 8 }
|
||||
@@ -0,0 +1,83 @@
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from RFC 3279, 3 ASN.1 Module
|
||||
-- (https://www.rfc-editor.org/rfc/rfc3279.html#section-3)
|
||||
|
||||
ansi-X9-62 OBJECT IDENTIFIER ::= {
|
||||
iso(1) member-body(2) us(840) 10045 }
|
||||
|
||||
-- Arc for ECDSA signature OIDS
|
||||
|
||||
id-ecSigType OBJECT IDENTIFIER ::= { ansi-X9-62 signatures(4) }
|
||||
|
||||
-- OID for ECDSA signatures with SHA-1
|
||||
|
||||
ecdsa-with-SHA1 OBJECT IDENTIFIER ::= { id-ecSigType 1 }
|
||||
|
||||
id-publicKeyType OBJECT IDENTIFIER ::= { ansi-X9-62 keyType(2) }
|
||||
|
||||
id-ecPublicKey OBJECT IDENTIFIER ::= { id-publicKeyType 1 }
|
||||
|
||||
-- Named Elliptic Curves in ANSI X9.62.
|
||||
|
||||
ellipticCurve OBJECT IDENTIFIER ::= { ansi-X9-62 curves(3) }
|
||||
|
||||
c-TwoCurve OBJECT IDENTIFIER ::= {
|
||||
ellipticCurve characteristicTwo(0) }
|
||||
|
||||
c2pnb163v1 OBJECT IDENTIFIER ::= { c-TwoCurve 1 }
|
||||
c2pnb163v2 OBJECT IDENTIFIER ::= { c-TwoCurve 2 }
|
||||
c2pnb163v3 OBJECT IDENTIFIER ::= { c-TwoCurve 3 }
|
||||
c2pnb176w1 OBJECT IDENTIFIER ::= { c-TwoCurve 4 }
|
||||
c2tnb191v1 OBJECT IDENTIFIER ::= { c-TwoCurve 5 }
|
||||
c2tnb191v2 OBJECT IDENTIFIER ::= { c-TwoCurve 6 }
|
||||
c2tnb191v3 OBJECT IDENTIFIER ::= { c-TwoCurve 7 }
|
||||
c2onb191v4 OBJECT IDENTIFIER ::= { c-TwoCurve 8 }
|
||||
c2onb191v5 OBJECT IDENTIFIER ::= { c-TwoCurve 9 }
|
||||
c2pnb208w1 OBJECT IDENTIFIER ::= { c-TwoCurve 10 }
|
||||
c2tnb239v1 OBJECT IDENTIFIER ::= { c-TwoCurve 11 }
|
||||
c2tnb239v2 OBJECT IDENTIFIER ::= { c-TwoCurve 12 }
|
||||
c2tnb239v3 OBJECT IDENTIFIER ::= { c-TwoCurve 13 }
|
||||
c2onb239v4 OBJECT IDENTIFIER ::= { c-TwoCurve 14 }
|
||||
c2onb239v5 OBJECT IDENTIFIER ::= { c-TwoCurve 15 }
|
||||
c2pnb272w1 OBJECT IDENTIFIER ::= { c-TwoCurve 16 }
|
||||
c2pnb304w1 OBJECT IDENTIFIER ::= { c-TwoCurve 17 }
|
||||
c2tnb359v1 OBJECT IDENTIFIER ::= { c-TwoCurve 18 }
|
||||
c2pnb368w1 OBJECT IDENTIFIER ::= { c-TwoCurve 19 }
|
||||
c2tnb431r1 OBJECT IDENTIFIER ::= { c-TwoCurve 20 }
|
||||
|
||||
primeCurve OBJECT IDENTIFIER ::= { ellipticCurve prime(1) }
|
||||
|
||||
prime192v1 OBJECT IDENTIFIER ::= { primeCurve 1 }
|
||||
prime192v2 OBJECT IDENTIFIER ::= { primeCurve 2 }
|
||||
prime192v3 OBJECT IDENTIFIER ::= { primeCurve 3 }
|
||||
prime239v1 OBJECT IDENTIFIER ::= { primeCurve 4 }
|
||||
prime239v2 OBJECT IDENTIFIER ::= { primeCurve 5 }
|
||||
prime239v3 OBJECT IDENTIFIER ::= { primeCurve 6 }
|
||||
prime256v1 OBJECT IDENTIFIER ::= { primeCurve 7 }
|
||||
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from RFC 5758, 3.2. ECDSA Signature Algorithm
|
||||
-- (https://www.rfc-editor.org/rfc/rfc5758.html#section-3.2)
|
||||
|
||||
ecdsa-with-SHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
|
||||
us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 1 }
|
||||
|
||||
ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
|
||||
us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 }
|
||||
|
||||
ecdsa-with-SHA384 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
|
||||
us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 3 }
|
||||
|
||||
ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
|
||||
us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 }
|
||||
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration
|
||||
|
||||
sigAlgs OBJECT IDENTIFIER ::= { 2 16 840 1 101 3 4 3 }
|
||||
|
||||
id-ecdsa-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 9 }
|
||||
id-ecdsa-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 10 }
|
||||
id-ecdsa-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 11 }
|
||||
id-ecdsa-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 12 }
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from RFC 8017, Appendix C
|
||||
-- (https://www.rfc-editor.org/rfc/rfc8017.html#appendix-C)
|
||||
|
||||
-- ============================
|
||||
-- Basic object identifiers
|
||||
-- ============================
|
||||
|
||||
-- The DER encoding of this in hexadecimal is:
|
||||
-- (0x)06 08
|
||||
-- 2A 86 48 86 F7 0D 01 01
|
||||
--
|
||||
pkcs-1 OBJECT IDENTIFIER ::= {
|
||||
iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1
|
||||
}
|
||||
|
||||
--
|
||||
-- When rsaEncryption is used in an AlgorithmIdentifier,
|
||||
-- the parameters MUST be present and MUST be NULL.
|
||||
--
|
||||
rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 }
|
||||
|
||||
--
|
||||
-- When id-RSAES-OAEP is used in an AlgorithmIdentifier, the
|
||||
-- parameters MUST be present and MUST be RSAES-OAEP-params.
|
||||
--
|
||||
id-RSAES-OAEP OBJECT IDENTIFIER ::= { pkcs-1 7 }
|
||||
|
||||
--
|
||||
-- When id-pSpecified is used in an AlgorithmIdentifier, the
|
||||
-- parameters MUST be an OCTET STRING.
|
||||
--
|
||||
id-pSpecified OBJECT IDENTIFIER ::= { pkcs-1 9 }
|
||||
|
||||
--
|
||||
-- When id-RSASSA-PSS is used in an AlgorithmIdentifier, the
|
||||
-- parameters MUST be present and MUST be RSASSA-PSS-params.
|
||||
--
|
||||
id-RSASSA-PSS OBJECT IDENTIFIER ::= { pkcs-1 10 }
|
||||
|
||||
--
|
||||
-- When the following OIDs are used in an AlgorithmIdentifier,
|
||||
-- the parameters MUST be present and MUST be NULL.
|
||||
--
|
||||
md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 }
|
||||
md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 }
|
||||
sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 }
|
||||
sha224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 14 }
|
||||
sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 }
|
||||
sha384WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 12 }
|
||||
sha512WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 13 }
|
||||
sha512-224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 15 }
|
||||
sha512-256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 16 }
|
||||
|
||||
--
|
||||
-- This OID really belongs in a module with the secsig OIDs.
|
||||
--
|
||||
id-sha1 OBJECT IDENTIFIER ::= {
|
||||
iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2)
|
||||
26
|
||||
}
|
||||
|
||||
--
|
||||
-- OIDs for MD2 and MD5, allowed only in EMSA-PKCS1-v1_5.
|
||||
--
|
||||
id-md2 OBJECT IDENTIFIER ::= {
|
||||
iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2
|
||||
}
|
||||
|
||||
id-md5 OBJECT IDENTIFIER ::= {
|
||||
iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5
|
||||
}
|
||||
|
||||
--
|
||||
-- When id-mgf1 is used in an AlgorithmIdentifier, the parameters
|
||||
-- MUST be present and MUST be a HashAlgorithm, for example, sha1.
|
||||
--
|
||||
id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 }
|
||||
|
||||
-- -------------------------------------------------------------------
|
||||
-- Taken from https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration
|
||||
|
||||
sigAlgs OBJECT IDENTIFIER ::= { 2 16 840 1 101 3 4 3 }
|
||||
|
||||
id-rsassa-pkcs1-v1_5-with-sha3-224 OBJECT IDENTIFIER ::= { sigAlgs 13 }
|
||||
id-rsassa-pkcs1-v1_5-with-sha3-256 OBJECT IDENTIFIER ::= { sigAlgs 14 }
|
||||
id-rsassa-pkcs1-v1_5-with-sha3-384 OBJECT IDENTIFIER ::= { sigAlgs 15 }
|
||||
id-rsassa-pkcs1-v1_5-with-sha3-512 OBJECT IDENTIFIER ::= { sigAlgs 16 }
|
||||
@@ -0,0 +1,25 @@
|
||||
$FIPSABLE=der_rsa.c der_dsa.c der_ec.c
|
||||
|
||||
SOURCE[../../libfips.a]=$FIPSABLE
|
||||
SOURCE[../../libnonfips.a]=$FIPSABLE
|
||||
|
||||
GENERATE[der_rsa.c]=der_rsa.c.in
|
||||
DEPEND[der_rsa.c]=oids_to_c.pm
|
||||
|
||||
DEPEND[der_rsa.o]=../include/prov/der_rsa.h
|
||||
GENERATE[../include/prov/der_rsa.h]=der_rsa.h.in
|
||||
DEPEND[../include/prov/der_rsa.h]=oids_to_c.pm
|
||||
|
||||
GENERATE[der_dsa.c]=der_dsa.c.in
|
||||
DEPEND[der_dsa.c]=oids_to_c.pm
|
||||
|
||||
DEPEND[der_dsa.o]=../include/prov/der_dsa.h
|
||||
GENERATE[../include/prov/der_dsa.h]=der_dsa.h.in
|
||||
DEPEND[../include/prov/der_dsa.h]=oids_to_c.pm
|
||||
|
||||
GENERATE[der_ec.c]=der_ec.c.in
|
||||
DEPEND[der_ec.c]=oids_to_c.pm
|
||||
|
||||
DEPEND[der_ec.o]=../include/prov/der_ec.h
|
||||
GENERATE[../include/prov/der_ec.h]=der_ec.h.in
|
||||
DEPEND[../include/prov/der_ec.h]=oids_to_c.pm
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/obj_mac.h>
|
||||
#include "prov/der_dsa.h"
|
||||
|
||||
/* Well known OIDs precompiled */
|
||||
{-
|
||||
$OUT = oids_to_c::process_leaves('providers/common/der/DSA.asn1',
|
||||
{ dir => $config{sourcedir},
|
||||
filter => \&oids_to_c::filter_to_C });
|
||||
-}
|
||||
|
||||
int DER_w_algorithmIdentifier_DSA(WPACKET *pkt, int tag, DSA *dsa)
|
||||
{
|
||||
return DER_w_begin_sequence(pkt, tag)
|
||||
/* No parameters (yet?) */
|
||||
&& DER_w_precompiled(pkt, -1, der_oid_id_dsa, sizeof(der_oid_id_dsa))
|
||||
&& DER_w_end_sequence(pkt, tag);
|
||||
}
|
||||
|
||||
#define MD_CASE(name) \
|
||||
case NID_##name: \
|
||||
precompiled = der_oid_id_dsa_with_##name; \
|
||||
precompiled_sz = sizeof(der_oid_id_dsa_with_##name); \
|
||||
break;
|
||||
|
||||
int DER_w_algorithmIdentifier_DSA_with(WPACKET *pkt, int tag,
|
||||
DSA *dsa, int mdnid)
|
||||
{
|
||||
const unsigned char *precompiled = NULL;
|
||||
size_t precompiled_sz = 0;
|
||||
|
||||
switch (mdnid) {
|
||||
MD_CASE(sha1);
|
||||
MD_CASE(sha224);
|
||||
MD_CASE(sha256);
|
||||
MD_CASE(sha384);
|
||||
MD_CASE(sha512);
|
||||
MD_CASE(sha3_224);
|
||||
MD_CASE(sha3_256);
|
||||
MD_CASE(sha3_384);
|
||||
MD_CASE(sha3_512);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DER_w_begin_sequence(pkt, tag)
|
||||
/* No parameters (yet?) */
|
||||
&& DER_w_precompiled(pkt, -1, precompiled, precompiled_sz)
|
||||
&& DER_w_end_sequence(pkt, tag);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include "internal/der.h"
|
||||
|
||||
/* Well known OIDs precompiled */
|
||||
{-
|
||||
$OUT = oids_to_c::process_leaves('providers/common/der/DSA.asn1',
|
||||
{ dir => $config{sourcedir},
|
||||
filter => \&oids_to_c::filter_to_H });
|
||||
-}
|
||||
|
||||
int DER_w_algorithmIdentifier_DSA(WPACKET *pkt, int tag, DSA *dsa);
|
||||
int DER_w_algorithmIdentifier_DSA_with(WPACKET *pkt, int tag,
|
||||
DSA *dsa, int mdnid);
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/obj_mac.h>
|
||||
#include "prov/der_ec.h"
|
||||
|
||||
/* Well known OIDs precompiled */
|
||||
{-
|
||||
$OUT = oids_to_c::process_leaves('providers/common/der/EC.asn1',
|
||||
{ dir => $config{sourcedir},
|
||||
filter => \&oids_to_c::filter_to_C });
|
||||
-}
|
||||
|
||||
int DER_w_algorithmIdentifier_EC(WPACKET *pkt, int cont, EC_KEY *ec)
|
||||
{
|
||||
return DER_w_begin_sequence(pkt, cont)
|
||||
/* No parameters (yet?) */
|
||||
&& DER_w_precompiled(pkt, -1, der_oid_id_ecPublicKey,
|
||||
sizeof(der_oid_id_ecPublicKey))
|
||||
&& DER_w_end_sequence(pkt, cont);
|
||||
}
|
||||
|
||||
/* Aliases so we can have a uniform MD_CASE */
|
||||
#define der_oid_id_ecdsa_with_sha1 der_oid_ecdsa_with_SHA1
|
||||
#define der_oid_id_ecdsa_with_sha224 der_oid_ecdsa_with_SHA224
|
||||
#define der_oid_id_ecdsa_with_sha256 der_oid_ecdsa_with_SHA256
|
||||
#define der_oid_id_ecdsa_with_sha384 der_oid_ecdsa_with_SHA384
|
||||
#define der_oid_id_ecdsa_with_sha512 der_oid_ecdsa_with_SHA512
|
||||
|
||||
#define MD_CASE(name) \
|
||||
case NID_##name: \
|
||||
precompiled = der_oid_id_ecdsa_with_##name; \
|
||||
precompiled_sz = sizeof(der_oid_id_ecdsa_with_##name); \
|
||||
break;
|
||||
|
||||
int DER_w_algorithmIdentifier_ECDSA_with(WPACKET *pkt, int cont,
|
||||
EC_KEY *ec, int mdnid)
|
||||
{
|
||||
const unsigned char *precompiled = NULL;
|
||||
size_t precompiled_sz = 0;
|
||||
|
||||
switch (mdnid) {
|
||||
MD_CASE(sha1);
|
||||
MD_CASE(sha224);
|
||||
MD_CASE(sha256);
|
||||
MD_CASE(sha384);
|
||||
MD_CASE(sha512);
|
||||
MD_CASE(sha3_224);
|
||||
MD_CASE(sha3_256);
|
||||
MD_CASE(sha3_384);
|
||||
MD_CASE(sha3_512);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DER_w_begin_sequence(pkt, cont)
|
||||
/* No parameters (yet?) */
|
||||
&& DER_w_precompiled(pkt, -1, precompiled, precompiled_sz)
|
||||
&& DER_w_end_sequence(pkt, cont);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include "internal/der.h"
|
||||
|
||||
/* Well known OIDs precompiled */
|
||||
{-
|
||||
$OUT = oids_to_c::process_leaves('providers/common/der/EC.asn1',
|
||||
{ dir => $config{sourcedir},
|
||||
filter => \&oids_to_c::filter_to_H });
|
||||
-}
|
||||
|
||||
int DER_w_algorithmIdentifier_EC(WPACKET *pkt, int cont, EC_KEY *ec);
|
||||
int DER_w_algorithmIdentifier_ECDSA_with(WPACKET *pkt, int cont,
|
||||
EC_KEY *ec, int mdnid);
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/obj_mac.h>
|
||||
#include "prov/der_rsa.h"
|
||||
|
||||
/* Well known OIDs precompiled */
|
||||
{-
|
||||
$OUT = oids_to_c::process_leaves('providers/common/der/RSA.asn1',
|
||||
{ dir => $config{sourcedir},
|
||||
filter => \&oids_to_c::filter_to_C });
|
||||
-}
|
||||
|
||||
int DER_w_algorithmIdentifier_RSA(WPACKET *pkt, int tag, RSA *rsa)
|
||||
{
|
||||
return DER_w_begin_sequence(pkt, tag)
|
||||
/* No parameters (yet?) */
|
||||
&& DER_w_precompiled(pkt, -1, der_oid_rsaEncryption,
|
||||
sizeof(der_oid_rsaEncryption))
|
||||
&& DER_w_end_sequence(pkt, tag);
|
||||
}
|
||||
|
||||
/* Aliases so we can have a uniform MD_CASE */
|
||||
#define der_oid_sha3_224WithRSAEncryption \
|
||||
der_oid_id_rsassa_pkcs1_v1_5_with_sha3_224
|
||||
#define der_oid_sha3_256WithRSAEncryption \
|
||||
der_oid_id_rsassa_pkcs1_v1_5_with_sha3_256
|
||||
#define der_oid_sha3_384WithRSAEncryption \
|
||||
der_oid_id_rsassa_pkcs1_v1_5_with_sha3_384
|
||||
#define der_oid_sha3_512WithRSAEncryption \
|
||||
der_oid_id_rsassa_pkcs1_v1_5_with_sha3_512
|
||||
|
||||
#define MD_CASE(name) \
|
||||
case NID_##name: \
|
||||
precompiled = der_oid_##name##WithRSAEncryption; \
|
||||
precompiled_sz = sizeof(der_oid_##name##WithRSAEncryption); \
|
||||
break;
|
||||
|
||||
int DER_w_algorithmIdentifier_RSA_with(WPACKET *pkt, int tag,
|
||||
RSA *rsa, int mdnid)
|
||||
{
|
||||
const unsigned char *precompiled = NULL;
|
||||
size_t precompiled_sz = 0;
|
||||
|
||||
switch (mdnid) {
|
||||
#ifndef FIPS_MODE
|
||||
MD_CASE(md2);
|
||||
MD_CASE(md5);
|
||||
#endif
|
||||
MD_CASE(sha1);
|
||||
MD_CASE(sha224);
|
||||
MD_CASE(sha256);
|
||||
MD_CASE(sha384);
|
||||
MD_CASE(sha512);
|
||||
MD_CASE(sha3_224);
|
||||
MD_CASE(sha3_256);
|
||||
MD_CASE(sha3_384);
|
||||
MD_CASE(sha3_512);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DER_w_begin_sequence(pkt, tag)
|
||||
/* No parameters (yet?) */
|
||||
&& DER_w_precompiled(pkt, -1, precompiled, precompiled_sz)
|
||||
&& DER_w_end_sequence(pkt, tag);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include "internal/der.h"
|
||||
|
||||
/* Well known OIDs precompiled */
|
||||
{-
|
||||
$OUT = oids_to_c::process_leaves('providers/common/der/RSA.asn1',
|
||||
{ dir => $config{sourcedir},
|
||||
filter => \&oids_to_c::filter_to_H });
|
||||
-}
|
||||
|
||||
int DER_w_algorithmIdentifier_RSA(WPACKET *pkt, int tag, RSA *rsa);
|
||||
int DER_w_algorithmIdentifier_RSA_with(WPACKET *pkt, int tag,
|
||||
RSA *rsa, int mdnid);
|
||||
@@ -0,0 +1,111 @@
|
||||
#! /usr/bin/env perl
|
||||
# Copyright 2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
# this file except in compliance with the License. You can obtain a copy
|
||||
# in the file LICENSE in the source distribution or at
|
||||
# https://www.openssl.org/source/license.html
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package oids_to_c;
|
||||
|
||||
use Carp;
|
||||
use File::Spec;
|
||||
use OpenSSL::OID;
|
||||
|
||||
my $OID_name_re = qr/([a-z](?:[-_A-Za-z0-9]*[A-Za-z0-9])?)/;
|
||||
my $OID_value_re = qr/(\{.*?\})/s;
|
||||
my $OID_def_re = qr/
|
||||
${OID_name_re} \s+ OBJECT \s+ IDENTIFIER \s*
|
||||
::=
|
||||
\s* ${OID_value_re}
|
||||
/x;
|
||||
|
||||
use Data::Dumper;
|
||||
|
||||
sub filter_to_H {
|
||||
my ($name, $comment) = @{ shift() };
|
||||
my @oid_nums = @_;
|
||||
|
||||
(my $C_name = $name) =~ s|-|_|g;
|
||||
my $C_bytes_size = 2 + scalar @_;
|
||||
|
||||
return <<"_____";
|
||||
extern const unsigned char der_oid_${C_name}[$C_bytes_size];
|
||||
_____
|
||||
}
|
||||
|
||||
sub filter_to_C {
|
||||
my ($name, $comment) = @{ shift() };
|
||||
my @oid_nums = @_;
|
||||
my $oid_size = scalar @oid_nums;
|
||||
|
||||
croak "Unsupported OID size (>127 bytes)" if $oid_size > 127;
|
||||
|
||||
(my $C_comment = $comment) =~ s|^| * |msg;
|
||||
$C_comment = "\n/*\n${C_comment}\n */" if $C_comment ne '';
|
||||
(my $C_name = $name) =~ s|-|_|g;
|
||||
my $C_bytes_size = 2 + $oid_size;
|
||||
my $C_bytes = join(', ', map { sprintf("0x%02X", $_) } @oid_nums );
|
||||
|
||||
return <<"_____";
|
||||
$C_comment
|
||||
#define DER_OID_V_${C_name} DER_P_OBJECT, $oid_size, ${C_bytes}
|
||||
#define DER_OID_SZ_${C_name} ${C_bytes_size}
|
||||
const unsigned char der_oid_${C_name}[DER_OID_SZ_${C_name}] = {
|
||||
DER_OID_V_${C_name}
|
||||
};
|
||||
_____
|
||||
}
|
||||
|
||||
sub _process {
|
||||
my %opts = %{ pop @_ } if ref $_[$#_] eq 'HASH';
|
||||
|
||||
# To maintain input order
|
||||
my @OID_names = ();
|
||||
|
||||
foreach my $file (@_) {
|
||||
my $input = File::Spec->catfile($opts{dir}, $file);
|
||||
open my $fh, $input or die "Reading $input: $!\n";
|
||||
|
||||
my $text = join('',
|
||||
map {
|
||||
s|--.*(\R)$|$1|;
|
||||
$_;
|
||||
} <$fh>);
|
||||
# print STDERR "-----BEGIN DEBUG-----\n";
|
||||
# print STDERR $text;
|
||||
# print STDERR "-----END DEBUG-----\n";
|
||||
use re 'debugcolor';
|
||||
while ($text =~ m/${OID_def_re}/sg) {
|
||||
my $comment = $&;
|
||||
my $name = $1;
|
||||
my $value = $2;
|
||||
|
||||
# print STDERR "-----BEGIN DEBUG $name-----\n";
|
||||
# print STDERR $value,"\n";
|
||||
# print STDERR "-----END DEBUG $name-----\n";
|
||||
register_oid($name, $value);
|
||||
push @OID_names, [ $name, $comment ];
|
||||
}
|
||||
}
|
||||
|
||||
return @OID_names;
|
||||
}
|
||||
|
||||
sub process_leaves {
|
||||
my %opts = %{ $_[$#_] } if ref $_[$#_] eq 'HASH';
|
||||
my @OID_names = _process @_;
|
||||
|
||||
my $text = '';
|
||||
my %leaves = map { $_ => 1 } registered_oid_leaves;
|
||||
foreach (grep { defined $leaves{$_->[0]} } @OID_names) {
|
||||
my $lines = $opts{filter}->($_, encode_oid($_->[0]));
|
||||
$text .= $lines;
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -64,10 +64,12 @@ int ERR_load_PROV_strings(void);
|
||||
# define PROV_R_FAILED_TO_GENERATE_KEY 121
|
||||
# define PROV_R_FAILED_TO_GET_PARAMETER 103
|
||||
# define PROV_R_FAILED_TO_SET_PARAMETER 104
|
||||
# define PROV_R_FAILED_TO_SIGN 175
|
||||
# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165
|
||||
# define PROV_R_INAVLID_UKM_LENGTH 146
|
||||
# define PROV_R_INVALID_AAD 108
|
||||
# define PROV_R_INVALID_CONSTANT_LENGTH 157
|
||||
# define PROV_R_INVALID_CURVE 176
|
||||
# define PROV_R_INVALID_CUSTOM_LENGTH 111
|
||||
# define PROV_R_INVALID_DATA 115
|
||||
# define PROV_R_INVALID_DIGEST 122
|
||||
@@ -107,6 +109,7 @@ int ERR_load_PROV_strings(void);
|
||||
# define PROV_R_NOT_SUPPORTED 136
|
||||
# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113
|
||||
# define PROV_R_NO_KEY_SET 114
|
||||
# define PROV_R_NO_PARAMETERS_SET 177
|
||||
# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106
|
||||
# define PROV_R_PSS_SALTLEN_TOO_SMALL 172
|
||||
# define PROV_R_READ_KEY 159
|
||||
|
||||
@@ -39,6 +39,7 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
|
||||
"failed to get parameter"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_SET_PARAMETER),
|
||||
"failed to set parameter"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_SIGN), "failed to sign"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE),
|
||||
"illegal or unsupported padding mode"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INAVLID_UKM_LENGTH),
|
||||
@@ -46,6 +47,7 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_AAD), "invalid aad"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_CONSTANT_LENGTH),
|
||||
"invalid constant length"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_CURVE), "invalid curve"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_CUSTOM_LENGTH),
|
||||
"invalid custom length"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_INVALID_DATA), "invalid data"},
|
||||
@@ -98,6 +100,7 @@ static const ERR_STRING_DATA PROV_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_NOT_XOF_OR_INVALID_LENGTH),
|
||||
"not xof or invalid length"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_NO_KEY_SET), "no key set"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_NO_PARAMETERS_SET), "no parameters set"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_OUTPUT_BUFFER_TOO_SMALL),
|
||||
"output buffer too small"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_PSS_SALTLEN_TOO_SMALL),
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/core_names.h>
|
||||
#include <openssl/err.h>
|
||||
#include "prov/provider_util.h"
|
||||
|
||||
void ossl_prov_cipher_reset(PROV_CIPHER *pc)
|
||||
@@ -76,12 +77,17 @@ int ossl_prov_cipher_load_from_params(PROV_CIPHER *pc,
|
||||
return 0;
|
||||
|
||||
EVP_CIPHER_free(pc->alloc_cipher);
|
||||
ERR_set_mark();
|
||||
pc->cipher = pc->alloc_cipher = EVP_CIPHER_fetch(ctx, p->data, propquery);
|
||||
/* TODO legacy stuff, to be removed */
|
||||
#ifndef FIPS_MODE /* Inside the FIPS module, we don't support legacy ciphers */
|
||||
if (pc->cipher == NULL)
|
||||
pc->cipher = EVP_get_cipherbyname(p->data);
|
||||
#endif
|
||||
if (pc->cipher != NULL)
|
||||
ERR_pop_to_mark();
|
||||
else
|
||||
ERR_clear_last_mark();
|
||||
return pc->cipher != NULL;
|
||||
}
|
||||
|
||||
@@ -131,12 +137,17 @@ int ossl_prov_digest_load_from_params(PROV_DIGEST *pd,
|
||||
return 0;
|
||||
|
||||
EVP_MD_free(pd->alloc_md);
|
||||
ERR_set_mark();
|
||||
pd->md = pd->alloc_md = EVP_MD_fetch(ctx, p->data, propquery);
|
||||
/* TODO legacy stuff, to be removed */
|
||||
#ifndef FIPS_MODE /* Inside the FIPS module, we don't support legacy digests */
|
||||
if (pd->md == NULL)
|
||||
pd->md = EVP_get_digestbyname(p->data);
|
||||
#endif
|
||||
if (pd->md != NULL)
|
||||
ERR_pop_to_mark();
|
||||
else
|
||||
ERR_clear_last_mark();
|
||||
return pd->md != NULL;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user