… | |
… | |
40 | typedef PKCS7 *OpenSSL__PKCS7; |
40 | typedef PKCS7 *OpenSSL__PKCS7; |
41 | typedef PKCS12 *OpenSSL__PKCS12; |
41 | typedef PKCS12 *OpenSSL__PKCS12; |
42 | typedef RSA *OpenSSL__RSA; |
42 | typedef RSA *OpenSSL__RSA; |
43 | typedef EVP_MD_CTX *OpenSSL__Digest; |
43 | typedef EVP_MD_CTX *OpenSSL__Digest; |
44 | typedef EVP_CIPHER_CTX *OpenSSL__Cipher; |
44 | typedef EVP_CIPHER_CTX *OpenSSL__Cipher; |
|
|
45 | typedef BIGNUM *OpenSSL__BN; |
45 | |
46 | |
46 | static inline SV* output_ASN1_INTEGER(ASN1_INTEGER *ai, SV *sv) |
47 | static 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 | |
503 | BIGNUM * |
504 | OpenSSL::BN |
504 | n(key) |
505 | n(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; |
|
|
534 | OUTPUT: |
533 | OUTPUT: |
535 | RETVAL |
534 | RETVAL |
536 | |
535 | |
537 | |
536 | |
538 | bool |
537 | bool |
… | |
… | |
1645 | } |
1644 | } |
1646 | RETVAL = sv_bio_final(bio); |
1645 | RETVAL = sv_bio_final(bio); |
1647 | OUTPUT: |
1646 | OUTPUT: |
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 | |
|
|
1656 | MODULE = OpenSSL PACKAGE = OpenSSL::BN |
|
|
1657 | |
|
|
1658 | OpenSSL::BN |
|
|
1659 | new(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 | |
|
|
1674 | OpenSSL::BN |
|
|
1675 | clone(bn) |
|
|
1676 | OpenSSL::BN bn |
|
|
1677 | CODE: |
|
|
1678 | RETVAL = BN_dup(bn); |
|
|
1679 | OUTPUT: |
|
|
1680 | RETVAL |
|
|
1681 | |
|
|
1682 | OpenSSL::BN |
|
|
1683 | add(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 | |
|
|
1702 | OpenSSL::BN |
|
|
1703 | mul(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 | |
|
|
1754 | IV |
|
|
1755 | icmp(bn1,bn2) |
|
|
1756 | OpenSSL::BN bn1 |
|
|
1757 | OpenSSL::BN bn2 |
|
|
1758 | CODE: |
|
|
1759 | RETVAL = BN_cmp(bn1,bn2); |
|
|
1760 | OUTPUT: |
|
|
1761 | RETVAL |
|
|
1762 | |
|
|
1763 | void |
|
|
1764 | inc(bn) |
|
|
1765 | OpenSSL::BN bn |
|
|
1766 | ALIAS: |
|
|
1767 | dec = 1 |
|
|
1768 | CODE: |
|
|
1769 | ((ix) ? BN_sub_word : BN_add_word)(bn, 1); |
|
|
1770 | |
|
|
1771 | |
|
|
1772 | SV * |
|
|
1773 | stringify(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 | |
|
|
1783 | OpenSSL::BN |
|
|
1784 | lshift(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 | |
|
|
1799 | OpenSSL::BN |
|
|
1800 | sqr(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 | |
|
|
1813 | bool |
|
|
1814 | bnbool(bn) |
|
|
1815 | OpenSSL::BN bn |
|
|
1816 | CODE: |
|
|
1817 | RETVAL = !BN_is_zero(bn); |
|
|
1818 | OUTPUT: |
|
|
1819 | RETVAL |
|
|
1820 | |
|
|
1821 | bool |
|
|
1822 | isprime(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 | |
|
|
1833 | void |
|
|
1834 | DESTROY(bn) |
|
|
1835 | OpenSSL::BN bn |
|
|
1836 | CODE: |
|
|
1837 | BN_clear_free(bn); |
|
|
1838 | |
|
|
1839 | |
|
|
1840 | |