Differences From Artifact [e6d26b97df]:
- File
cackey.c
— part of check-in
[a2ac84031e]
at
2010-05-17 19:37:43
on branch trunk
— Updated to support determining key size from X.509 object (untested)
Updated to set HW TOKEN flag
Updated to pad sign/decrypt message to key size (untested) (user: rkeene, size: 148161) [annotate] [blame] [check-ins using]
To Artifact [64d4505a46]:
- File cackey.c — part of check-in [66507306f5] at 2010-05-17 19:43:12 on branch trunk — Fixed issues with padding (user: rkeene, size: 148394) [annotate] [blame] [check-ins using]
1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 .... 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 .... 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 |
* ... * */ static ssize_t cackey_signdecrypt(struct cackey_slot *slot, struct cackey_identity *identity, unsigned char *buf, size_t buflen, unsigned char *outbuf, size_t outbuflen) { unsigned char *tmpbuf, *tmpbuf_s; unsigned char bytes_to_send, p1; cackey_ret send_ret; size_t tmpbuflen, padlen; int free_tmpbuf = 0; int le; CACKEY_DEBUG_PRINTF("Called."); if (buflen > 255) { ................................................................................ free_tmpbuf = 1; padlen = tmpbuflen - buflen - 3; tmpbuf[0] = 0x00; tmpbuf[1] = 0x01; memset(&tmpbuf[2], 0xFF, padlen); tmpbuf[padlen]= 0x00; memcpy(&tmpbuf[padlen + 1], buf, buflen); } else { tmpbuf = buf; tmpbuflen = buflen; free_tmpbuf = 0; padlen = 0; } } else { ................................................................................ bytes_to_send = 245; p1 = 0x80; } else { bytes_to_send = tmpbuflen; p1 = 0x00; } send_ret = cackey_send_apdu(slot, GSCIS_CLASS_GLOBAL_PLATFORM, GSCIS_INSTR_SIGNDECRYPT, p1, 0x00, bytes_to_send, tmpbuf, le, NULL, outbuf, &outbuflen); if (send_ret != CACKEY_PCSC_S_OK) { CACKEY_DEBUG_PRINTF("ADPU Sending Failed -- returning in error."); if (free_tmpbuf) { if (tmpbuf_s) { free(tmpbuf_s); } } |
> | | > > > | > > > > |
1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 .... 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 .... 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 |
* ... * */ static ssize_t cackey_signdecrypt(struct cackey_slot *slot, struct cackey_identity *identity, unsigned char *buf, size_t buflen, unsigned char *outbuf, size_t outbuflen) { unsigned char *tmpbuf, *tmpbuf_s; unsigned char bytes_to_send, p1; cackey_ret send_ret; uint16_t respcode; size_t tmpbuflen, padlen; int free_tmpbuf = 0; int le; CACKEY_DEBUG_PRINTF("Called."); if (buflen > 255) { ................................................................................ free_tmpbuf = 1; padlen = tmpbuflen - buflen - 3; tmpbuf[0] = 0x00; tmpbuf[1] = 0x01; memset(&tmpbuf[2], 0xFF, padlen); tmpbuf[padlen + 2]= 0x00; memcpy(&tmpbuf[padlen + 3], buf, buflen); CACKEY_DEBUG_PRINTBUF("Unpadded:", buf, buflen); CACKEY_DEBUG_PRINTBUF("Padded:", tmpbuf, tmpbuflen); } else { tmpbuf = buf; tmpbuflen = buflen; free_tmpbuf = 0; padlen = 0; } } else { ................................................................................ bytes_to_send = 245; p1 = 0x80; } else { bytes_to_send = tmpbuflen; p1 = 0x00; } send_ret = cackey_send_apdu(slot, GSCIS_CLASS_GLOBAL_PLATFORM, GSCIS_INSTR_SIGNDECRYPT, p1, 0x00, bytes_to_send, tmpbuf, le, &respcode, outbuf, &outbuflen); if (send_ret != CACKEY_PCSC_S_OK) { CACKEY_DEBUG_PRINTF("ADPU Sending Failed -- returning in error."); if (respcode == 0x6982) { CACKEY_DEBUG_PRINTF("Security status not satisified."); } if (free_tmpbuf) { if (tmpbuf_s) { free(tmpbuf_s); } } |