Provide RSA_{g,s}et0_crt_params()
authortb <tb@openbsd.org>
Sun, 18 Feb 2018 12:57:14 +0000 (12:57 +0000)
committertb <tb@openbsd.org>
Sun, 18 Feb 2018 12:57:14 +0000 (12:57 +0000)
ok jsing

lib/libcrypto/Symbols.list
lib/libcrypto/rsa/rsa.h
lib/libcrypto/rsa/rsa_lib.c

index 79d82d4..e5997cc 100644 (file)
@@ -2211,6 +2211,7 @@ RSA_flags
 RSA_free
 RSA_generate_key
 RSA_generate_key_ex
+RSA_get0_crt_params
 RSA_get0_factors
 RSA_get0_key
 RSA_get_default_method
@@ -2237,6 +2238,7 @@ RSA_private_decrypt
 RSA_private_encrypt
 RSA_public_decrypt
 RSA_public_encrypt
+RSA_set0_crt_params
 RSA_set0_factors
 RSA_set0_key
 RSA_set_default_method
index 6cce38d..b131359 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: rsa.h,v 1.35 2018/02/18 12:55:32 tb Exp $ */
+/* $OpenBSD: rsa.h,v 1.36 2018/02/18 12:57:14 tb Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -399,6 +399,9 @@ void *RSA_get_ex_data(const RSA *r, int idx);
 void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e,
     const BIGNUM **d);
 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
+void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1,
+    const BIGNUM **iqmp);
+int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
 void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
 
index 379f4cb..426c52f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: rsa_lib.c,v 1.34 2018/02/18 12:55:32 tb Exp $ */
+/* $OpenBSD: rsa_lib.c,v 1.35 2018/02/18 12:57:14 tb Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -290,6 +290,41 @@ RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
        return 1;
 }
 
+void
+RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1,
+    const BIGNUM **iqmp)
+{
+       if (dmp1 != NULL)
+               *dmp1 = r->dmp1;
+       if (dmq1 != NULL)
+               *dmq1 = r->dmq1;
+       if (iqmp != NULL)
+               *iqmp = r->iqmp;
+}
+
+int
+RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
+{
+       if ((r->dmp1 == NULL && dmp1 == NULL) ||
+           (r->dmq1 == NULL && dmq1 == NULL) ||
+           (r->iqmp == NULL && iqmp == NULL))
+               return 0;
+
+       if (dmp1 != NULL) {
+               BN_free(r->dmp1);
+               r->dmp1 = dmp1;
+       }
+       if (dmq1 != NULL) {
+               BN_free(r->dmq1);
+               r->dmq1 = dmq1;
+       }
+       if (iqmp != NULL) {
+               BN_free(r->iqmp);
+               r->iqmp = iqmp;
+       }
+
+       return 1;
+}
 
 void
 RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q)