# Ext/openssl and newer OpenSSL

**URL:** <https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579>\
**Category:** Development\
**Created:** [May 14, 2008, 11:18am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579 "2008-05-14T11:18:45Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [May 14, 2008, 11:18am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/1 "2008-05-14T11:18:45Z")

</div>

e$B$3$s$K$A$O!#e(B

e$B:G6a!"e(BNetBSD  
currente$B$Ge(Bext/openssle$B$,%(%i!\<$H$J$k$h$&$K$J$j$^$7$?!#e(B  
e$BD\>@$N860x$O!“e(BNetBSD  
currente$B$G!“e(BOpenSSLe$B$Ne(B0.9.8ge$B$h$j$b?7$7$$!”$H$”$ke(B  
snapshote$B$,\<h$j9~$^$l$?e(B(e$B2?$G$de(B?)e$B$3$H$K$h$j$^$9!#e(B

ext/openssle$B$G$O!“e(BOpenSSLe$B$K7g$1$F$$$k4X?t$N%A%’%C%/$r9T$$!”$J$$$b$N$K$De(B  
e$B$$$F$O!"\<+A0$N$b$N$r;H$&$h$&$K$7$F$$$k$h$&$G$9!#$H$3$m$,!"$3$3$G4X?tDje(B  
e$B5A$K0c$$$,H/@8$7$F$$$^$7$?!#e(B

Ruby:ext/openssl int HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in)  
Newer OpenSSL void HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in)

e$B8e\<T$Ne(BHMAC\_CTX\_copy()e$B$O!"$7$C$+$je(B OpenSSLe$B$Ne(Bhmac.h  
e$B$H$$$C$?%X%C%@%U%!%$e(B  
e$B%k$G$b@k8@$5$l$F$$$^$9!#e(B

ext/openssl/extconf.rbe$B$G$O!“e(BHMAC\_CTX\_copy()e$B$,B8:\_$9$k$3$H$r8!CN$7$F$$$^e(B  
e$B$9$,!“e(Bext/openssl/openssl\_missing.he$B$G$N@k8@$OL5\>r7o$K9T$C$F$$$k$?$a!”$^e(B  
e$B$:$O$3$3$G4X?t@k8@$NIT0lCW$G%(%i!\<$H$J$j$^$9!#e(B(e$B$3$NItJ,$K$D$$$F$O!”;}$Ce(B  
e$B$F$$$k$HH=CG$7$?\>l9g$O!"e(B#ifdef e$B$G@k8@$b$7$J$$$Y$-$G$7$g$&!#e(B)

e$B$3$NItJ,$rDL$7$?$H$7$F$b!“e(Bext/openssl/ossl\_hmac.ce$B$NCf$G$O!”$A$c$s$He(B  
HMAC\_CTX\_copy()e$B$NLa$jCM$r%A%’%C%/$7$F$$$^$9$N$G!"$3$NJU$j$bLdBj$H$J$je(B  
e$B$^$9!#e(B

HMAC\_CTX\_copy()e$B$N?7$7$$e(BOpenSSLe$B$N\<BAu$G$O!"FbIt$G8F$S=P$7$F$$$ke(B  
EVP\_MD\_CTX\_copy()e$B$NLa$jCM$OA4$/%A%’%C%/$7$F$$$J$+$C$?$j$9$kJU$j$O!“e(B  
e$B\<c43$N5?Ld$r46$8!”$3$NE@$G$O$`$7$me(BRubye$B$Ne(Bext/openssl/openssl\_missing.c  
e$B$NJ}$,%3!\<%IE\*$K$O@5$7$$$H;W$$$^$9!#e(B

e$B$$$:$l$K$7$F$b!"?7$7$$e(BOpenSSLe$B$N\<BAu$K9g$o$;$k7A$G%Q%C%A$r:n@.$7$F$\_$^e(B  
e$B$7$?!#e(B

–  
e$B?@8Me(B e$BN4Gne(B(e$B$+$s$Ye(B e$B$?$+$R$me(B) at e$B;E;v\>le(B

— ext/openssl/openssl\_missing.c.orig 2007-02-13 08:01:19.000000000  
+0900  
+++ ext/openssl/openssl\_missing.c  
@@ -22,7 +22,7 @@  
#include “openssl\_missing.h”

#if !defined(HAVE\_HMAC\_CTX\_COPY)  
-int  
+void  
HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in)  
{  
if (!out || !in) return 0;

— ext/openssl/openssl\_missing.h.orig 2007-02-13 08:01:19.000000000  
+0900  
+++ ext/openssl/openssl\_missing.h  
@@ -56,14 +56,33 @@ extern “C” {  
(char _(_)())d2i\_PKCS7\_RECIP\_INFO, (char \*)ri)  
#endif

+#if !defined(HAVE\_EVP\_MD\_CTX\_INIT)  
void HMAC\_CTX\_init(HMAC\_CTX \*ctx);  
-int HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in);  
+#endif  
+  
+#if !defined(HAVE\_HMAC\_CTX\_COPY)  
+void HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in);  
+#endif  
+  
+#if !defined(HAVE\_HMAC\_CTX\_CLEANUP)  
void HMAC\_CTX\_cleanup(HMAC\_CTX \*ctx);  
+#endif

+#if !defined(HAVE\_EVP\_MD\_CTX\_CREATE)  
EVP\_MD\_CTX \*EVP\_MD\_CTX\_create(void);  
+#endif  
+  
+#if !defined(HAVE\_EVP\_MD\_CTX\_INIT)  
void EVP\_MD\_CTX\_init(EVP\_MD\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_EVP\_MD\_CTX\_CLEANUP)  
int EVP\_MD\_CTX\_cleanup(EVP\_MD\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_EVP\_MD\_CTX\_DESTROY)  
void EVP\_MD\_CTX\_destroy(EVP\_MD\_CTX \*ctx);  
+#endif

#if !defined(HAVE\_EVP\_CIPHER\_CTX\_COPY)  
int EVP\_CIPHER\_CTX\_copy(EVP\_CIPHER\_CTX \*out, EVP\_CIPHER\_CTX \*in);  
@@ -107,19 +126,54 @@ int EVP\_CIPHER\_CTX\_copy(EVP\_CIPHER\_CTX \*  
#define OPENSSL\_cleanse(p, l) memset(p, 0, l)  
#endif

+#if !defined(HAVE\_X509\_STORE\_SET\_EX\_DATA)  
void \*X509\_STORE\_get\_ex\_data(X509\_STORE \*str, int idx);  
int X509\_STORE\_set\_ex\_data(X509\_STORE \*str, int idx, void \*data);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_SET\_VERSION)  
int X509\_CRL\_set\_version(X509\_CRL \*x, long version);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_SET\_ISSUER\_NAME)  
int X509\_CRL\_set\_issuer\_name(X509\_CRL \*x, X509\_NAME \*name);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_SORT)  
int X509\_CRL\_sort(X509\_CRL \*c);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_ADD0\_REVOKED)  
int X509\_CRL\_add0\_revoked(X509\_CRL \*crl, X509\_REVOKED \*rev);  
+#endif  
+  
+#if !defined(HAVE\_BN\_MOD\_SQR)  
int BN\_mod\_sqr(BIGNUM \*r, const BIGNUM \*a, const BIGNUM \*m, BN\_CTX  
\*ctx);  
+#endif  
+  
+#if !defined(HAVE\_BN\_MOD\_ADD)  
int BN\_mod\_add(BIGNUM \*r, const BIGNUM \*a, const BIGNUM \*b, const  
BIGNUM \*m, BN\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_BN\_MOD\_SUB)  
int BN\_mod\_sub(BIGNUM \*r, const BIGNUM \*a, const BIGNUM \*b, const  
BIGNUM \*m, BN\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_BN\_RAND\_RANGE)  
int BN\_rand\_range(BIGNUM \*r, BIGNUM \*range);  
+#endif  
+  
+#if !defined(HAVE\_BN\_PSEUDO\_RAND\_RANGE)  
int BN\_pseudo\_rand\_range(BIGNUM \*r, BIGNUM \*range);  
+#endif  
+  
+#if !defined(HAVE\_CONF\_GET1\_DEFAULT\_CONFIG\_FILE)  
char \*CONF\_get1\_default\_config\_file(void);  
+#endif  
+  
+#if !defined(HAVE\_PEM\_DEF\_CALLBACK)  
int PEM\_def\_callback(char \*buf, int num, int w, void \*key);  
+#endif

#if defined(\_\_cplusplus)  
}

— ext/openssl/ossl\_hmac.c.orig 2007-03-12 13:12:32.000000000 +0900  
+++ ext/openssl/ossl\_hmac.c  
@@ -81,9 +81,7 @@ ossl\_hmac\_copy(VALUE self, VALUE other)  
GetHMAC(self, ctx1);  
SafeGetHMAC(other, ctx2);

- if (!HMAC\_CTX\_copy(ctx1, ctx2)) {
- ossl\_raise(eHMACError, NULL);
- }

- HMAC\_CTX\_copy(ctx1, ctx2);  
return self;  
}

@@ -104,9 +102,7 @@ hmac\_final(HMAC\_CTX \*ctx, char \*\*buf, in  
{  
HMAC\_CTX final;

- if (!HMAC\_CTX\_copy(&final, ctx)) {
- ossl\_raise(eHMACError, NULL);
- }

- HMAC\_CTX\_copy(&final, ctx);  
if (!(\*buf = OPENSSL\_malloc(HMAC\_size(&final)))) {  
HMAC\_CTX\_cleanup(&final);  
OSSL\_Debug(“Allocating %d mem”, HMAC\_size(&final));

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [May 14, 2008, 11:31am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/2 "2008-05-14T11:31:50Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:34691] ext/openssl and newer OpenSSL”  
on Wed, 14 May 2008 18:18:28 +0900, Takahiro K.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|e$B:G6a!"e(BNetBSD currente$B$Ge(Bext/openssle$B$,%(%i!\<$H$J$k$h$&$K$J$j$^$7$?!#e(B  
|e$BD\>@$N860x$O!“e(BNetBSD currente$B$G!“e(BOpenSSLe$B$Ne(B0.9.8ge$B$h$j$b?7$7$$!”$H$”$ke(B  
|snapshote$B$,\<h$j9~$^$l$?e(B(e$B2?$G$de(B?)e$B$3$H$K$h$j$^$9!#e(B

|e$B$$$:$l$K$7$F$b!"?7$7$$e(BOpenSSLe$B$N\<BAu$K9g$o$;$k7A$G%Q%C%A$r:n@.$7$F$\_$^e(B  
|e$B$7$?!#e(B

e$B$H$/$KLdBj$O8+Ev$?$i$J$$$N$G\<h$j9~$b$&$H;W$$$^$9!#?@8M$5$s$Ke(B  
e$B$O%3%\_%C%H8"$O$5$7$“$2$F$$$^$;$s$G$7$?$G$7$g$&$+!#$J$i!”;d$,e(B  
e$B:n6H$7$^$9$,!#e(B

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [May 14, 2008, 11:37am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/3 "2008-05-14T11:37:47Z")

</div>

e$B$3$s$K$A$O!#e(B

In message [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
on Wed, 14 May 2008 18:31:28 +0900,  
Yukihiro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> |e$B:G6a!"e(BNetBSD currente$B$Ge(Bext/openssle$B$,%(%i!\<$H$J$k$h$&$K$J$j$^$7$?!#e(B  
> |e$BD\>@$N860x$O!“e(BNetBSD currente$B$G!“e(BOpenSSLe$B$Ne(B0.9.8ge$B$h$j$b?7$7$$!”$H$”$ke(B  
> |snapshote$B$,\<h$j9~$^$l$?e(B(e$B2?$G$de(B?)e$B$3$H$K$h$j$^$9!#e(B
> 
> |e$B$$$:$l$K$7$F$b!"?7$7$$e(BOpenSSLe$B$N\<BAu$K9g$o$;$k7A$G%Q%C%A$r:n@.$7$F$\_$^e(B  
> |e$B$7$?!#e(B
> 
> e$B$H$/$KLdBj$O8+Ev$?$i$J$$$N$G\<h$j9~$b$&$H;W$$$^$9!#?@8M$5$s$Ke(B  
> e$B$"$j$,$H$&$4$6$$$^$9!#\<j85$Ne(BNetBSD  
> currente$B$H!"e(B(e$B$^$@e(BOpenSSLe$B$,?7$7$/$J$Ce(B  
> e$B$F$$$J$$e(B)NetBSD  
> 4.0\_STABLEe$B$N4D6-$G%3%s%Q%$%k$,DL$k$3$H$O3NG’$7$F$$$^$9!#e(B

> e$B$O%3%_%C%H8"$O$5$7$“$2$F$$$^$;$s$G$7$?$G$7$g$&$+!#$J$i!”;d$,e(B  
> e$B:n6H$7$^$9$,!#e(B  
> e$B$“$j$,$H$&$4$6$$$^$9!#$?$@!”;d\<+?H$,e(Bsvn  
> readye$B$H8@$($k\>u67$K$O$J$C$F$$e(B  
> e$B$J$$$3$H$H!"7QB3$7$F%3%_%C%H$G$-$k$h$&$J:n6H$,$G$-$k\>u67$K$J$5$=$&$G$9e(B  
> e$B$N$G!":#2s$O:n6H$NJ}$r$\*4j$$$7$^$9!#e(B

e$B$“$H!”$A$g$C$H%&%)!\<%K%s%0$,L=P$D5$$,$7$^$9$N$G!“$b$&\>/$7$@$13NG’$r9Te(B  
e$B$$$?$$$H;W$$$^$9$N$G!”\>/$7$\*BT$A2\<$5$$!#e(B(e$B:#HUCf$K$O:FEY%a!\<%k$7$^$9!#e(B)

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [June 21, 2010, 9:54am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/4 "2010-06-21T09:54:43Z")

</div>

2e$BG/A0$N%a!\<%k$KJV?.$G$9!#e(B

2008/5/14 Takahiro K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B8e\<T$Ne(BHMAC\_CTX\_copy()e$B$O!"$7$C$+$je(B OpenSSLe$B$Ne(Bhmac.h e$B$H$$$C$?%X%C%@%U%!%$e(B  
> e$B%k$G$b@k8@$5$l$F$$$^$9!#e(B

e$B$$$m$$$m$J7P0^$,$"$C$?$N$+$b$7$l$^$;$s$,!"8=;~E@$Ne(BOpenSSL  
1.0.0e$B$G$O!"e(B  
e$B5le(Bext/openssl/openssl\_missing.\*e$B$NDj5A$K$J$C$F$$$^$9!#$^$?!"e(B0.9.8oe$B$K$O!"e(B  
HMAC\_CTX\_copye$B$NDj5A$OF~$C$F$$$^$;$s!#e(B

e$B85%a!\<%k$G?@8M$5$s$,=q$+$l$F$$$k$H$\*$j!“5lDj5A$N$[$&$,9%$^$7$$$3$H$K0c$$$”$j$^$;$s!#e(B  
e$B$H$$$&$o$1$G!“$G$-$l$PLa$7$?$$$H;W$C$F$$$k$N$G$9$,!”\>e5-e(Bvoid  
e$B!A7O$NDj5A$,e(B  
e$BF~$C$F$$$?e(BOpenSSLe$B$N%P!\<%8%g%s$J$I!“$o$+$k$G$7$g$&$+!#e(BNetBSDe$B$N$H$”$k%9%J%C%W%7%g%C%H!“e(B  
e$B$@$1$G$”$l$P!“$b$&%3%s%Q%$%k$G$-$J$/$F$b$$$$$+$J!”$H;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [June 21, 2010, 10:12am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/5 "2010-06-21T10:12:52Z")

</div>

In message  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
on Mon, 21 Jun 2010 16:54:12 +0900,  
“NAKAMURA, Hiroshi” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 2e$BG/A0$N%a!\<%k$KJV?.$G$9!#e(B  
> e$B2?$He(B!

> e$B$$$m$$$m$J7P0^$,$"$C$?$N$+$b$7$l$^$;$s$,!"8=;~E@$Ne(BOpenSSL 1.0.0e$B$G$O!"e(B  
> e$B5le(Bext/openssl/openssl\_missing.\*e$B$NDj5A$K$J$C$F$$$^$9!#$^$?!"e(B0.9.8oe$B$K$O!"e(B  
> HMAC\_CTX\_copye$B$NDj5A$OF~$C$F$$$^$;$s!#e(B
> 
> e$B85%a!\<%k$G?@8M$5$s$,=q$+$l$F$$$k$H$\*$j!“5lDj5A$N$[$&$,9%$^$7$$$3$H$Ke(B  
> e$B0c$$$”$j$^$;$s!#e(B  
> e$B$H$$$&$o$1$G!“$G$-$l$PLa$7$?$$$H;W$C$F$$$k$N$G$9$,!”\>e5-e(Bvoid e$B!A7O$NDj5A$,e(B  
> e$BF~$C$F$$$?e(BOpenSSLe$B$N%P!\<%8%g%s$J$I!“$o$+$k$G$7$g$&$+!#e(BNetBSDe$B$N$H$”$ke(B  
> e$B%9%J%C%W%7%g%C%H!“e(B  
> e$B$@$1$G$”$l$P!“$b$&%3%s%Q%$%k$G$-$J$/$F$b$$$$$+$J!”$H;W$$$^$9!#e(B  
> e$B;DG0$G$9$,!“!V$H$”$k%9%J%C%W%7%g%C%H!W$H$$$&$o$1$G$O$J$/!“?tF|A0$K=P$?e(B  
> NetBSD 5.1\_RC3e$B$r4^$`e(B NetBSD 5  
> e$B7ONs$O!”$3$N$H$-$Ne(BOpenSSLe$B$N%P!\<%8%g%s$Ge(B  
> e$B%V%i%s%A$,:n@.$5$l$F$$$k$N$G!"$9$Y$F3:Ev$9$k$3$H$K$J$j$^$9!#e(B:-(

e$B$3$l$O!"2\>$Ke(B 5.2 e$B$H$+$K$J$C$F$bJQ$o$k$3$H$O$J$$$G$7$g$&!#e(B

e$B2?;~$K$J$k$+$o$+$i$J$$!“e(BNetBSD 6  
e$B$G$O!”%Y!\<%9%7%9%F%`$Ke(BOpenSSL 1.1.0  
e$B0\9T$H$J$k$N$b3N\<B$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [May 14, 2008, 11:55am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/6 "2008-05-14T11:55:53Z")

</div>

In message [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
on Wed, 14 May 2008 18:37:04 +0900,  
Takahiro K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B$“$H!”$A$g$C$H%&%)!\<%K%s%0$,L=P$D5$$,$7$^$9$N$G!“$b$&\>/$7$@$13NG’$r9Te(B  
> e$B$$$?$$$H;W$$$^$9$N$G!”\>/$7$\*BT$A2\<$5$$!#e(B(e$B:#HUCf$K$O:FEY%a!\<%k$7$^$9!#e(B)  
> e$BL\N)$C$F$$$k$N$O!“e(BOpenSSLe$BB&$NLdBj$N5$$b$7$^$7$?$N$G$”$-$i$a$^$9!#e(B

e$B@h$N%Q%C%A$N$&$A!"e(Bext/openssl/openssl\_missing.ce$B$KBP$9$kItJ,$@$1=$@5$7e(B  
e$B$^$7$?$N$G!“2~$a$FE:IU$7$^$9!#:9$7;Y$($J$1$l$P!”\<h$j9~$s$G2\<$5$$!#e(B

(e$B$&$%$`!"$d$C$Q$je(Bvoide$B$K$9$k$N$K$O!"5$$,0z$1$ke(B…e$B!#e(B)

–  
e$B?@8Me(B e$BN4Gne(B(e$B$+$s$Ye(B e$B$?$+$R$me(B) at e$B;E;v\>le(B

— ext/openssl/openssl\_missing.c.orig 2007-02-13 08:01:19.000000000  
+0900  
+++ ext/openssl/openssl\_missing.c  
@@ -22,17 +22,15 @@  
#include “openssl\_missing.h”

#if !defined(HAVE\_HMAC\_CTX\_COPY)  
-int  
+void  
HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in)  
{

- if (!out || !in) return 0;

- if (!out || !in) return;  
memcpy(out, in, sizeof(HMAC\_CTX));

- if (!EVP\_MD\_CTX\_copy(&out-\>md\_ctx, &in-\>md\_ctx)
- 

```
 || !EVP_MD_CTX_copy(&out->i_ctx, &in->i_ctx)

```

- 

```
 || !EVP_MD_CTX_copy(&out->o_ctx, &in->o_ctx))

```

- return 0;
- return 1;

- EVP\_MD\_CTX\_copy(&out-\>md\_ctx, &in-\>md\_ctx);
- EVP\_MD\_CTX\_copy(&out-\>i\_ctx, &in-\>i\_ctx);
- EVP\_MD\_CTX\_copy(&out-\>o\_ctx, &in-\>o\_ctx);  
}  
#endif /\* HAVE\_HMAC\_CTX\_COPY _/  
 #endif /_ NO\_HMAC \*/

— ext/openssl/openssl\_missing.h.orig 2007-02-13 08:01:19.000000000  
+0900  
+++ ext/openssl/openssl\_missing.h  
@@ -56,14 +56,33 @@ extern “C” {  
(char _(_)())d2i\_PKCS7\_RECIP\_INFO, (char \*)ri)  
#endif

+#if !defined(HAVE\_EVP\_MD\_CTX\_INIT)  
void HMAC\_CTX\_init(HMAC\_CTX \*ctx);  
-int HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in);  
+#endif  
+  
+#if !defined(HAVE\_HMAC\_CTX\_COPY)  
+void HMAC\_CTX\_copy(HMAC\_CTX \*out, HMAC\_CTX \*in);  
+#endif  
+  
+#if !defined(HAVE\_HMAC\_CTX\_CLEANUP)  
void HMAC\_CTX\_cleanup(HMAC\_CTX \*ctx);  
+#endif

+#if !defined(HAVE\_EVP\_MD\_CTX\_CREATE)  
EVP\_MD\_CTX \*EVP\_MD\_CTX\_create(void);  
+#endif  
+  
+#if !defined(HAVE\_EVP\_MD\_CTX\_INIT)  
void EVP\_MD\_CTX\_init(EVP\_MD\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_EVP\_MD\_CTX\_CLEANUP)  
int EVP\_MD\_CTX\_cleanup(EVP\_MD\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_EVP\_MD\_CTX\_DESTROY)  
void EVP\_MD\_CTX\_destroy(EVP\_MD\_CTX \*ctx);  
+#endif

#if !defined(HAVE\_EVP\_CIPHER\_CTX\_COPY)  
int EVP\_CIPHER\_CTX\_copy(EVP\_CIPHER\_CTX \*out, EVP\_CIPHER\_CTX \*in);  
@@ -107,19 +126,54 @@ int EVP\_CIPHER\_CTX\_copy(EVP\_CIPHER\_CTX \*  
#define OPENSSL\_cleanse(p, l) memset(p, 0, l)  
#endif

+#if !defined(HAVE\_X509\_STORE\_SET\_EX\_DATA)  
void \*X509\_STORE\_get\_ex\_data(X509\_STORE \*str, int idx);  
int X509\_STORE\_set\_ex\_data(X509\_STORE \*str, int idx, void \*data);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_SET\_VERSION)  
int X509\_CRL\_set\_version(X509\_CRL \*x, long version);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_SET\_ISSUER\_NAME)  
int X509\_CRL\_set\_issuer\_name(X509\_CRL \*x, X509\_NAME \*name);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_SORT)  
int X509\_CRL\_sort(X509\_CRL \*c);  
+#endif  
+  
+#if !defined(HAVE\_X509\_CRL\_ADD0\_REVOKED)  
int X509\_CRL\_add0\_revoked(X509\_CRL \*crl, X509\_REVOKED \*rev);  
+#endif  
+  
+#if !defined(HAVE\_BN\_MOD\_SQR)  
int BN\_mod\_sqr(BIGNUM \*r, const BIGNUM \*a, const BIGNUM \*m, BN\_CTX  
\*ctx);  
+#endif  
+  
+#if !defined(HAVE\_BN\_MOD\_ADD)  
int BN\_mod\_add(BIGNUM \*r, const BIGNUM \*a, const BIGNUM \*b, const  
BIGNUM \*m, BN\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_BN\_MOD\_SUB)  
int BN\_mod\_sub(BIGNUM \*r, const BIGNUM \*a, const BIGNUM \*b, const  
BIGNUM \*m, BN\_CTX \*ctx);  
+#endif  
+  
+#if !defined(HAVE\_BN\_RAND\_RANGE)  
int BN\_rand\_range(BIGNUM \*r, BIGNUM \*range);  
+#endif  
+  
+#if !defined(HAVE\_BN\_PSEUDO\_RAND\_RANGE)  
int BN\_pseudo\_rand\_range(BIGNUM \*r, BIGNUM \*range);  
+#endif  
+  
+#if !defined(HAVE\_CONF\_GET1\_DEFAULT\_CONFIG\_FILE)  
char \*CONF\_get1\_default\_config\_file(void);  
+#endif  
+  
+#if !defined(HAVE\_PEM\_DEF\_CALLBACK)  
int PEM\_def\_callback(char \*buf, int num, int w, void \*key);  
+#endif

#if defined(\_\_cplusplus)  
}

— ext/openssl/ossl\_hmac.c.orig 2007-03-12 13:12:32.000000000 +0900  
+++ ext/openssl/ossl\_hmac.c  
@@ -81,9 +81,7 @@ ossl\_hmac\_copy(VALUE self, VALUE other)  
GetHMAC(self, ctx1);  
SafeGetHMAC(other, ctx2);

- if (!HMAC\_CTX\_copy(ctx1, ctx2)) {
- ossl\_raise(eHMACError, NULL);
- }

- HMAC\_CTX\_copy(ctx1, ctx2);  
return self;  
}

@@ -104,9 +102,7 @@ hmac\_final(HMAC\_CTX \*ctx, char \*\*buf, in  
{  
HMAC\_CTX final;

- if (!HMAC\_CTX\_copy(&final, ctx)) {
- ossl\_raise(eHMACError, NULL);
- }

- HMAC\_CTX\_copy(&final, ctx);  
if (!(\*buf = OPENSSL\_malloc(HMAC\_size(&final)))) {  
HMAC\_CTX\_cleanup(&final);  
OSSL\_Debug(“Allocating %d mem”, HMAC\_size(&final));

---

<div class="post-metadata">

**Author:** ![Takahiro\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/76d3ee/32.png) [@Takahiro\_K](https://www.ruby-forum.com/u/Takahiro_K)\
**Post date:** [June 21, 2010, 10:46am UTC](https://www.ruby-forum.com/t/ext-openssl-and-newer-openssl/137579/7 "2010-06-21T10:46:49Z")

</div>

e$B$5$C$=$/$"$j$,$H$&$4$6$$$^$9!#e(B

2010/6/21 Takahiro K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > e$B$H$$$&$o$1$G!“$G$-$l$PLa$7$?$$$H;W$C$F$$$k$N$G$9$,!”\>e5-e(Bvoid e$B!A7O$NDj5A$,e(B  
> > e$BF~$C$F$$$?e(BOpenSSLe$B$N%P!\<%8%g%s$J$I!“$o$+$k$G$7$g$&$+!#e(BNetBSDe$B$N$H$”$ke(B  
> > e$B%9%J%C%W%7%g%C%H!“e(B  
> > e$B$@$1$G$”$l$P!“$b$&%3%s%Q%$%k$G$-$J$/$F$b$$$$$+$J!”$H;W$$$^$9!#e(B  
> > e$B;DG0$G$9$,!“!V$H$”$k%9%J%C%W%7%g%C%H!W$H$$$&$o$1$G$O$J$/!“?tF|A0$K=P$?e(B  
> > NetBSD 5.1\_RC3e$B$r4^$`e(B NetBSD 5 e$B7ONs$O!”$3$N$H$-$Ne(BOpenSSLe$B$N%P!\<%8%g%s$Ge(B  
> > e$B%V%i%s%A$,:n@.$5$l$F$$$k$N$G!"$9$Y$F3:Ev$9$k$3$H$K$J$j$^$9!#e(B:-(

e$B$J$k$[$I!#$=$l$G$OEvLLJ|CV$G$9$M!#$“$H$G7P0^$r%3%a%s%H$H$7$FDI5-$7$F$\*$-$^$9!#e(B  
2008-11-02e$B$KF~$C$?$h$&$J$N$G!”$=$l0JA0$K\<h$j9~$^$l$F$?$N$G$9$M!#e(B  
[http://cvs.openssl.org/filediff?f=openssl/crypto/hmac/hmac.h&v1=1.20&v2=1.21](http://cvs.openssl.org/filediff?f=openssl/crypto/hmac/hmac.h&v1=1.20&v2=1.21)

# e$B$A$c$s$H$7$?e(BSecurity Officere$B$N$$$k$H$3$m$O6/$$$J!\<!#e(B

e$B$I$&$G$b$$$$OC$G$9$,!"$J$s$G$3$s$JOC$r\>x$7JV$7$?$+$H$$$&$He(B:

1. 64bite$B%^%7%s$r\<j$KF~$l$?!#e(B
2. Ubuntu 10.04e$B$rF~$l$?!Je(Bopenssl 0.9.8k+)
3. /usr/local/ssle$B$Ke(Bopenssl 1.0.0ae$B$rF~$l$?e(B
4. 

–with-openssl-dir=/usr/local/ssle$B$Ge(Bruby\_1\_8e$B$r%3%s%Q%$%k$7$?$i!“e(B  
openssl\_missing.\*e$B$N”,$N$H$3$m$G%3%s%Q%$%k%(%i!\<!#e(B

e$B$b$A$m$s0-$$$N$O;d$G!“%X%C%@%U%!%$%k$Oe(B1.0.0ae$B!”%j%s%/$9$k%i%$%V%i%j$Oe(B0.9.8k+e$B!"e(B  
e$B$H$$$&\>u67$K$7$F$7$^$C$?$;$$$G$7$?!#2?$b9M$($:$Ke(Bopenssl  
1.0.0ae$B$r%$%s%9%H!\<%k$9$k$H!"e(B  
e$B%i%$%V%i%j$Oe(B/usr/local/ss/lib64e$B$KF~$k$N$G!"e(B  
–with-openssl-include=/usr/local/ssl/include  
–with-openssl-lib=/usr/local/ssl/lib64  
e$B$K$7$J$$$H$$$1$J$+$C$?!#e(B

e$B$G!“$3$N!J@5\>o$G$J$$4D6-$G$N!K%3%s%Q%$%k%(%i!\<$,!”\>e5-$NDj5A%:%l$K$h$k$b$N$@$C$?!“e(B  
e$B$H$$$&7P0^$G$7$?!#AG?M$G$b$J$1$l$P%O%^$i$J$$%l%”%1!\<%9$J$N$G!"J|CV$G$h$$$H;W$$$^$9!#e(B
