Overview
| Comment: | Fixed issues with padding | 
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive | 
| Timelines: | family | ancestors | descendants | both | trunk | 
| Files: | files | file ages | folders | 
| SHA1: | 66507306f5956ac2f95f1957d5c73709 | 
| User & Date: | rkeene on 2010-05-17 19:43:12 | 
| Other Links: | manifest | tags | 
Context
| 2010-05-17 | ||
| 19:53 | Updated to treat a request of read of 0 bytes as a no-op. check-in: 45212cc4ca user: rkeene tags: trunk | |
| 19:43 | Fixed issues with padding check-in: 66507306f5 user: rkeene tags: trunk | |
| 19:37 | 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)check-in: a2ac84031e user: rkeene tags: trunk | |
Changes
Modified cackey.c from [e6d26b97df] to [64d4505a46].
| ︙ | ︙ | |||
| 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 | 
 *     ...
 *
 */
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) {
 | > | 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 | 
 *     ...
 *
 */
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) {
 | 
| ︙ | ︙ | |||
| 1906 1907 1908 1909 1910 1911 1912 | free_tmpbuf = 1; padlen = tmpbuflen - buflen - 3; tmpbuf[0] = 0x00; tmpbuf[1] = 0x01; memset(&tmpbuf[2], 0xFF, padlen); | | | > > > | 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 | 
			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 {
 | 
| ︙ | ︙ | |||
| 1943 1944 1945 1946 1947 1948 1949 | 
			bytes_to_send = 245;
			p1 = 0x80;
		} else {
			bytes_to_send = tmpbuflen;
			p1 = 0x00;
		}
 | | > > > > | 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 | 
			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);
				}
			}
 | 
| ︙ | ︙ |