ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/OpenSSL/OpenSSL.xs
(Generate patch)

Comparing OpenSSL/OpenSSL.xs (file contents):
Revision 1.17 by root, Sun Oct 28 03:29:11 2001 UTC vs.
Revision 1.18 by stefan, Mon Oct 29 05:38:03 2001 UTC

40typedef PKCS7 *OpenSSL__PKCS7; 40typedef PKCS7 *OpenSSL__PKCS7;
41typedef PKCS12 *OpenSSL__PKCS12; 41typedef PKCS12 *OpenSSL__PKCS12;
42typedef RSA *OpenSSL__RSA; 42typedef RSA *OpenSSL__RSA;
43typedef EVP_MD_CTX *OpenSSL__Digest; 43typedef EVP_MD_CTX *OpenSSL__Digest;
44typedef EVP_CIPHER_CTX *OpenSSL__Cipher; 44typedef EVP_CIPHER_CTX *OpenSSL__Cipher;
45typedef BIGNUM *OpenSSL__BN;
45 46
46static inline SV* output_ASN1_INTEGER(ASN1_INTEGER *ai, SV *sv) 47static inline SV* output_ASN1_INTEGER(ASN1_INTEGER *ai, SV *sv)
47{ 48{
48 if(!ai) 49 if(!ai)
49 croak("got 0-ptr"); 50 croak("got 0-ptr");
498 if(RSA_check_key(key) == 1) 499 if(RSA_check_key(key) == 1)
499 XSRETURN_YES; 500 XSRETURN_YES;
500 XSRETURN_NO; 501 XSRETURN_NO;
501 502
502 503
503BIGNUM * 504OpenSSL::BN
504n(key) 505n(key)
505 OpenSSL::RSA key; 506 OpenSSL::RSA key;
506 ALIAS: 507 ALIAS:
507 e = 1 508 e = 1
508 d = 2 509 d = 2
509 p = 3 510 p = 3
510 q = 4 511 q = 4
511 dmp1 = 5 512 dmp1 = 5
512 dmq1 = 6 513 dmq1 = 6
513 iqmp = 7 514 iqmp = 7
514 PREINIT:
515 BIGNUM *bn = 0;
516 CODE: 515 CODE:
516 RETVAL = 0;
517 if(!key) 517 if(!key)
518 croak("invalid key"); 518 croak("invalid key");
519 switch(ix) { 519 switch(ix) {
520 case 0: bn = key->n; break; 520 case 0: RETVAL = key->n; break;
521 case 1: bn = key->e; break; 521 case 1: RETVAL = key->e; break;
522 case 2: bn = key->d; break; 522 case 2: RETVAL = key->d; break;
523 case 3: bn = key->p; break; 523 case 3: RETVAL = key->p; break;
524 case 4: bn = key->q; break; 524 case 4: RETVAL = key->q; break;
525 case 5: bn = key->dmp1; break; 525 case 5: RETVAL = key->dmp1; break;
526 case 6: bn = key->dmq1; break; 526 case 6: RETVAL = key->dmq1; break;
527 case 7: bn = key->iqmp; break; 527 case 7: RETVAL = key->iqmp; break;
528 default: 528 default:
529 croak("huch"); 529 croak("huch");
530 } 530 }
531 if(!bn) 531 if(!RETVAL)
532 croak("bignum not defined (maybe pubkey ?)"); 532 croak("bignum not defined (maybe pubkey ?)");
533 RETVAL = bn;
534OUTPUT: 533OUTPUT:
535 RETVAL 534 RETVAL
536 535
537 536
538bool 537bool
1645 } 1644 }
1646 RETVAL = sv_bio_final(bio); 1645 RETVAL = sv_bio_final(bio);
1647OUTPUT: 1646OUTPUT:
1648 RETVAL 1647 RETVAL
1649 1648
1649#include "EXTERN.h"
1650#include "perl.h"
1651#include "XSUB.h"
1652
1653#include <openssl/bn.h>
1654
1655
1656MODULE = OpenSSL PACKAGE = OpenSSL::BN
1657
1658OpenSSL::BN
1659new(class,...)
1660 SV *class
1661 CODE:
1662 unsigned char *p;
1663 RETVAL = BN_new();
1664 BN_init(RETVAL);
1665 if(items == 2) {
1666 p = SvPV(ST(1), PL_na);
1667 BN_dec2bn(&RETVAL, p);
1668 } else {
1669 BN_zero(RETVAL);
1670 }
1671 OUTPUT:
1672 RETVAL
1673
1674OpenSSL::BN
1675clone(bn)
1676 OpenSSL::BN bn
1677 CODE:
1678 RETVAL = BN_dup(bn);
1679 OUTPUT:
1680 RETVAL
1681
1682OpenSSL::BN
1683add(bn1,bn2)
1684 OpenSSL::BN bn1
1685 OpenSSL::BN bn2
1686 ALIAS:
1687 sub = 1
1688 CODE:
1689 RETVAL = BN_new();
1690 BN_init(RETVAL);
1691 switch(ix) {
1692 case 0:
1693 BN_add(RETVAL, bn1, bn2);
1694 break;
1695 case 1:
1696 BN_sub(RETVAL, bn1, bn2);
1697 break;
1698 }
1699 OUTPUT:
1700 RETVAL
1701
1702OpenSSL::BN
1703mul(bn1,bn2)
1704 OpenSSL::BN bn1
1705 OpenSSL::BN bn2
1706 ALIAS:
1707 div = 1
1708 mod = 2
1709 exp = 3
1710 CODE:
1711 BN_CTX *ctx;
1712 ctx = BN_CTX_new();
1713 BN_CTX_init(ctx);
1714 RETVAL = BN_new();
1715 BN_init(RETVAL);
1716 switch(ix) {
1717 case 0:
1718 BN_mul(RETVAL, bn1, bn2, ctx);
1719 break;
1720 case 1:
1721 {
1722 BIGNUM *tmp = BN_new();
1723 BN_init(tmp);
1724 if(BN_is_zero(bn2)) {
1725 BN_clear_free(tmp);
1726 croak("Illegal division by zero");
1727 }
1728 BN_div(RETVAL, tmp, bn1, bn2, ctx);
1729 BN_clear_free(tmp);
1730 }
1731 break;
1732 case 2:
1733 {
1734 BIGNUM *tmp = BN_new();
1735 BN_init(tmp);
1736 if(BN_is_zero(bn2)) {
1737 BN_clear_free(tmp);
1738 croak("Illegal modulus zero");
1739 }
1740 BN_div(tmp, RETVAL, bn1, bn2, ctx);
1741 BN_clear_free(tmp);
1742 }
1743 break;
1744 case 3:
1745 {
1746 BN_exp(RETVAL, bn1, bn2, ctx);
1747 }
1748 break;
1749 }
1750 BN_CTX_free(ctx);
1751 OUTPUT:
1752 RETVAL
1753
1754IV
1755icmp(bn1,bn2)
1756 OpenSSL::BN bn1
1757 OpenSSL::BN bn2
1758 CODE:
1759 RETVAL = BN_cmp(bn1,bn2);
1760 OUTPUT:
1761 RETVAL
1762
1763void
1764inc(bn)
1765 OpenSSL::BN bn
1766 ALIAS:
1767 dec = 1
1768 CODE:
1769 ((ix) ? BN_sub_word : BN_add_word)(bn, 1);
1770
1771
1772SV *
1773stringify(bn)
1774 OpenSSL::BN bn
1775 CODE:
1776 char *p;
1777 p = BN_bn2dec(bn);
1778 RETVAL = newSVpv(p,0);
1779 free(p);
1780 OUTPUT:
1781 RETVAL
1782
1783OpenSSL::BN
1784lshift(bn,cnt)
1785 OpenSSL::BN bn
1786 IV cnt
1787 ALIAS:
1788 rshift = 1
1789 CODE:
1790 RETVAL = BN_new();
1791 BN_init(RETVAL);
1792 if(ix)
1793 BN_rshift(RETVAL,bn,cnt);
1794 else
1795 BN_lshift(RETVAL, bn, cnt);
1796 OUTPUT:
1797 RETVAL
1798
1799OpenSSL::BN
1800sqr(bn)
1801 OpenSSL::BN bn
1802 CODE:
1803 BN_CTX *ctx;
1804 ctx = BN_CTX_new();
1805 BN_CTX_init(ctx);
1806 RETVAL = BN_new();
1807 BN_init(RETVAL);
1808 BN_sqr(RETVAL, bn, ctx);
1809 BN_CTX_free(ctx);
1810 OUTPUT:
1811 RETVAL
1812
1813bool
1814bnbool(bn)
1815 OpenSSL::BN bn
1816 CODE:
1817 RETVAL = !BN_is_zero(bn);
1818 OUTPUT:
1819 RETVAL
1820
1821bool
1822isprime(bn)
1823 OpenSSL::BN bn
1824 CODE:
1825 BN_CTX *ctx;
1826 ctx = BN_CTX_new();
1827 BN_CTX_init(ctx);
1828 RETVAL = BN_is_prime(bn, 30, 0, ctx, 0);
1829 OUTPUT:
1830 RETVAL
1831
1832
1833void
1834DESTROY(bn)
1835 OpenSSL::BN bn
1836 CODE:
1837 BN_clear_free(bn);
1838
1839
1840

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines