OATH Applet
The OATH protocol is used to manage and use OATH credentials with a CanoKey. It can be accessed over USB, using ISO 7816-4 commands as defined in this document.
1. General Definitions
AID
The AID of the admin applet is A0000005272101.
Instructions
| Name |
Code |
| PUT |
01h |
| DELETE |
02h |
| LIST |
03h |
| CALCULATE |
04h |
| CALCULATE ALL |
05h |
| SEND REMAINING |
06h |
| SET DEFAULT |
55h |
| SELECT |
A4h |
Algorithms
| Name |
Code |
| HMAC-SHA1 |
01h |
| HMAC-SHA256 |
02h |
Types
| Name |
Code |
| HOTP |
10h |
| TOTP |
20h |
Properties
| Name |
Code |
Description |
| Only increasing |
01h |
Enforces that a challenge is always higher than the previous |
| Require touch |
02h |
Require button press to generate OATH codes |
| Exportable |
04h |
Secret key can be exported by admin applet |
2. Select
Selects the application for use.
Request
| Field |
Value |
| CLA |
00h |
| INS |
A4h |
| P1 |
04h |
| P2 |
00h |
| Lc |
Length of AID (7) |
| Data |
AID (A0 00 00 05 27 21 01) |
Response
| SW |
Description |
| 9000 |
Success |
3. Put
Adds a new (or overwrites) OATH credential.
Request
| Field |
Value |
| CLA |
00h |
| INS |
01h |
| P1 |
00h |
| P2 |
00h |
| Lc |
Length of data |
| Data |
See below |
Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 71h |
Length of name, max 64 bytes |
Name |
| 73h |
Length of key + 2 |
Byte 1: High 4 bits is type, low 4 bits is algorithm Byte 2: Number of digits in OATH code Rest: Key |
| 78h |
1 |
Property byte, optional |
| 7Ah |
4 |
HOTP counter, optional |
Response
| SW |
Description |
| 9000 |
Success |
4. Delete
Deletes an existing credential.
Request
| Field |
Value |
| CLA |
00h |
| INS |
02h |
| P1 |
00h |
| P2 |
00h |
| Lc |
Length of data |
| Data |
See below |
Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 71h |
Length of name, max 64 bytes |
Name |
Response
| SW |
Description |
| 9000 |
Success |
| 6984 |
No such object |
5. List
Lists configured credentials.
Request
| Field |
Value |
| CLA |
00h |
| INS |
03h |
| P1 |
00h |
| P2 |
00h |
Response Data
The response will be a continual list of objects looking like:
| Tag |
Length |
Value |
| 71h |
Length of name |
Name |
| 75h |
2 |
Byte 1: High 4 bits is type, low 4 bits is algorithm Byte 2: Number of digits in OATH code |
Response Code
| SW |
Description |
| 9000 |
Success |
| 61xx |
More data available |
6. Calculate
Calculates one named credential.
Request
| Field |
Value |
| CLA |
00h |
| INS |
04h |
| P1 |
00h |
| P2 |
00h |
| Lc |
Length of data |
| Data |
See below |
Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 71h |
Length of name, max 64 bytes |
Name |
| 74h |
8 |
Challenge (in big-endian) |
Response Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 76h |
Length of response + 1 |
Byte 1: Number of digits in the OATH code Rest: Response |
Response Code
| SW |
Description |
| 9000 |
Success |
| 6984 |
No such object |
7. Calculate All
Performs CALCULATE for all available credentials, returns name + response for TOTP and just name for HOTP and credentials requiring touch.
Request
| Field |
Value |
| CLA |
00h |
| INS |
05h |
| P1 |
00h |
| P2 |
00h |
| Lc |
Length of data |
| Data |
See below |
Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 74h |
8 |
Challenge (in big-endian) |
Response Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 71h |
Length of name |
Name |
| 77h for HOTP, 7Ch for touch, 76h for response |
Length of response + 1 |
Byte 1: Number of digits in the OATH code Rest: Response |
Response Code
| SW |
Description |
| 9000 |
Success |
| 61xx |
More data available |
8. Send Remaining
Gets remaining data if everything didn’t fit in previous response (response code was 61xx).
Request
| Field |
Value |
| CLA |
00h |
| INS |
06h |
| P1 |
00h |
| P2 |
00h |
Response Data
Continued data where the previous command left off.
Response Code
| SW |
Description |
| 9000 |
Success |
| 61xx |
More data available |
9. Set Default HOTP
Set a HOTP credential as default. If the keyboard interface is enabled, this HOTP code is typed when user touches Canokey.
Request
| Field |
Value |
| CLA |
00h |
| INS |
55h |
| P1 |
00h |
| P2 |
00h |
| Lc |
Length of data |
| Data |
See below |
Data
Data is encoded in TLV-format.
| Tag |
Length |
Value |
| 71h |
Length of name, max 64 bytes |
Name |
Response
| SW |
Description |
| 9000 |
Success |
| 6984 |
No such object |
| 6985 |
TOTP is not supported |