Commit Graph

125 Commits

Author SHA1 Message Date
Nguyễn Hồng Quân 901c7952c1 Replace hardcode. 2014-11-09 15:58:40 +07:00
Nguyễn Hồng Quân 7c9bc4d283 OpenPGP: Fix crash after accessing inexistent file. 2014-07-14 23:58:28 +08:00
Nguyễn Hồng Quân c71934af67 OpenPGP: Rename private "blob" type to avoid confusing with variable name.
This name has been used for both data type and variable name of that
type.
2014-07-14 23:58:28 +08:00
Nguyễn Hồng Quân aded490b64 OpenPGP: Use directly binary array of APDUs for ERASE command.
I used a string presentation before and it needed an extra conversion step.
2014-07-14 23:53:44 +08:00
Nguyễn Hồng Quân 7c27cea61f OpenPGP: Make indentation consistent (space -> tab). 2014-07-14 23:53:44 +08:00
Nguyễn Hồng Quân 6aa4896b35 Move declaration to top of block. 2014-07-14 02:02:08 +08:00
Nguyễn Hồng Quân 7ba89893da OpenPGP: Make code neater 2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân a42eb5e585 OpenPGP: Correct parameter checking. 2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân a1c8c99858 OpenPGP: Delete key as file, for Gnuk. 2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân e71906ed23 OpenPGP: Overcome the restriction of even data length of Gnuk.
When write certificate with odd length to Gnuk, we add zero padding to make it even.
2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân cbc53b9a97 OpenPGP: Support write certificate for Gnuk. 2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân ebbebb4fa6 OpenPGP: Provide enough buffer to read pubkey from Gnuk. 2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân 1df3daeb62 OpenPGP: Read some empty DOs from Gnuk.
In Gnuk, some empty DOs are returned as not exist, instead of existing with empty value.
So, we will consider them exist in driver.
2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân db39041cc1 OpenPGP: Correct building Extended Header List when importing keys. 2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân 3b8f77882b OpenPGP: Support erasing (reset) card.
Command: openpgp-tool --erase
2014-07-14 02:02:07 +08:00
Nguyễn Hồng Quân c81eab5a70 OpenPGP: Include private DO to filesystem at driver initialization.
In old implementation, the DOs which their access is restricted by
PIN (like DOs 0101 -> 0104) were excluded from the fake filesystem,
leading to that we cannot read their data later, even if we verified PIN.
2014-07-14 02:02:06 +08:00
Nguyễn Hồng Quân 1789cf0345 OpenPGP: Detect and support Gnuk Token.
http://www.fsij.org/gnuk/
2014-07-14 02:02:06 +08:00
Frank Morgner a64326e768 fixed compiler warnings (partially submitted)
Signed-off-by: Frank Morgner <morgner@informatik.hu-berlin.de>

PR-222: commit 0b567dbaa8
partially submitted by Viktor Tarasov
2014-05-03 21:47:15 +02:00
Frank Morgner d21830344f fixed a ton of compiler warnings 2013-08-03 19:15:55 +02:00
Frank Morgner e3649fb7de fixed even more compiler warnings 2013-08-02 15:43:25 +02:00
Ludovic Rousseau 9ca47cded6 Fix a memory leak
Do not forget to also free data in case of error.

Coverity: Resource leak (RESOURCE_LEAK)
Calling allocation function "calloc".
2012-08-25 19:15:27 +02:00
Ludovic Rousseau ed959004dd Fix a potential memory leak
If tlvblock is not stored then the value is lost and the allocated
mempry is leaked.

Coverity: Resource leak (RESOURCE_LEAK)
Calling allocation function "pgp_build_tlv" on "tlvblock".
2012-08-25 19:15:27 +02:00
Nguyễn Hồng Quân 1adbb3fae7 OpenPGP: Set write access more restrictive for pubkey blobs.
marschap: "The WRITE_ALWAYS ACL tells anyone can write to this file at any time."
2012-08-12 15:57:03 +02:00
Nguyễn Hồng Quân e34866f188 OpenPGP: Accept authentication key for S/MIME decrypting.
The card contains only 1 certificate, which can be used for encrypting.
But this certificate is bound with authentication key, so when decrypting,
the authentication key will be presented to check.
This commit allows to bypass the check in driver. However, it is not enough.
The users have to import the same key to "Encryption key" to help the card find
right key to work.

OpenPGP: Add log and comments.

OpenPGP: Pretend to select dummy files.
Some files are needed by pkcs15init, but not exist in OpenPGP card.
We pretend to know these dummy files to make pkcs15init successful.

Compilation error on windows:
when declaring array use explicit size, add pkcs15-openpgp.obj in Makefile.mak
2012-07-29 14:04:08 +02:00
Nguyễn Hồng Quân 30e61d9fbf OpenPGP: Handle access on dummy files, which is assumed to exist by pkcs15init.
OpenPGP: Update card algorithms after importing key.

OpenPGP: Add SC_ALGORITHM_ONBOARD_KEY_GEN flag to card algorithms.
2012-07-29 13:09:08 +02:00
Nguyễn Hồng Quân 7123638454 OpenPGP: Correct access condition for some pubkey blobs.
OpenPGP: Don't really delete pubkeys blobs.
2012-07-29 13:09:08 +02:00
Viktor Tarasov 0518ced8e0 asn1: export 'asn1-write-element' function
... used by OpenPGP driver
2012-07-29 13:09:00 +02:00
Nguyễn Hồng Quân 42ad3c1dff OpenPGP: Add support for key import at driver level.
OpenPGP: Some indentations need to be tab-size-independent.

OpenPGP: Check for null data when storing fingerprints.

OpenPGP: Allow to provide creation time to store (when gen/import key).
Old: Only store current time.
New: Can provide time to store, not only calculate current time.

OpenPGP: Correct setting content of pubkey blobs after key generation.

cardctl: Add definitions to support key import in OpenPGP.

OpenPGP: Add support for key import at driver level.
2012-07-29 12:48:59 +02:00
Nguyễn Hồng Quân 50e37aa849 OpenPGP: Correct the way to set output after generating key.
Correct the way to parse response data.
Updated wrong blob for pubkey info <~~ Fix.

OpenPGP: Store creation time after generating keys.

OpenPGP: Put_data: Handle the case that DO exists but its blob does not.
When checking DO before writing, relying on blobs only will miss the case that DO exists but its blob does not, when DO is non-readable.

OpenPGP: Set algorithm attributes before generating key.

OpenPGP: Add dependency of OpenSSL.

OpenPGP: Calculate and store fingerprint.
Calculate and store fingerprint after generating key.

OpenPGP: Update blob of pubkey info.
Update blob holding pubkey info after generating key.

OpenPGP: Add step to update card algorithms.
Update card algorithms after generating key. However, this step is not implemented yet, because of suspection about wrong data (see code comment).
2012-07-29 12:48:21 +02:00
Nguyễn Hồng Quân 0b469ed31e OpenPGP: Add an explanation when building APDU. 2012-07-07 19:00:35 +02:00
Peter Marschall 34541e95c4 OpenPGP: add LOG_FUNC_CALLED() for "symmetric" logging 2012-06-17 10:49:00 +02:00
Nguyễn Hồng Quân 8db8f76bad OpenPGP: Change whitespace. 2012-06-16 15:43:51 +02:00
Nguyễn Hồng Quân ccb1067d75 OpenPGP: Correct the APDU preparation step for key generation. 2012-06-16 15:43:09 +02:00
Nguyễn Hồng Quân 5e295ba08d OpenPGP: Remove unused constants. 2012-06-15 14:40:14 +02:00
Viktor Tarasov 9466891752 openpgp: coverity scan warning MISSING_RETURN
Coverity Scan CID: 709045
2012-06-11 18:51:06 +02:00
Peter Marschall a09f304817 OpenPGP: clean up & fix pgp_delete_file()
* use LOG_FUNC_CALLED() .. LOG_FUNC_RETURN for "symmetric" logging
* don't zero-fill the DO's contents but empty it
* get rid of unnecessary variables
* select parent DF after deletion (required by to ISO 7816-9)
* don't try to delete MF
2012-06-09 13:48:09 +02:00
Peter Marschall 2aa4cf57ed OpenPGP: simplify pgp_update_binary() even more
Fail on idx > 0 in order to avoid the requirement to read from the DO.
The DO may be read-protected, and this might either fail or produce
wrong results.
2012-06-09 13:48:09 +02:00
Peter Marschall d7f58f7ea7 OpenPGP: cleanup & fix pgp_update_binary()
* use LOG_FUNC_CALLED() .. LOG_FUNC_RETURN for "symmetric" logging
* update comment
* check that blob->data is defined
* fix writing new data to the correct offset
* use calloc() instead of malloc() & memset()
* align pgp_ops function pointer list
2012-06-09 13:48:09 +02:00
Peter Marschall c8e802eab6 OpenPGP: simplify & clean up pgp_put_data()
* make sure variables of type u8 do only get passed fitting data
* use LOG_FUNC_CALLED() .. LOG_FUNC_RETURN for "symmetric" logging
* leave most of the spcial casing in ADPU handling to sc_adpu_transmit()
* use SC_ADPU_CASE_1 for empty buffer (avoids special casing Lc=0)
* clean up log strings & comments
2012-06-09 13:48:09 +02:00
Peter Marschall 0010fcbe6b OpenPGP: make pgp_set_blob() a bit more resilient
* use calloc() instead of malloc() to have defined contents
* only copy from passed data when it is not NULL
2012-06-09 13:48:09 +02:00
Nguyễn Hồng Quân 73387d4b84 OpenPGP: Correct ACL key_ref
Correct ACL key_ref after redefining conventional OpenPGP key-ref (0x81-0x83 -> 1-3).
2012-06-09 08:04:19 +02:00
Peter Marschall 9e04ae46bb OpenPGP: implement pgp_find_blob()
Replace the "one-trick-pony" pgp_do_iswritable() with a more generic
function returning the blob matching the passed tag.

This way we can get rid of the one-line function pgp_blob_iswritable() too.
comparisons like these can be done in the caller.
2012-06-08 20:17:35 +02:00
Peter Marschall f5dc252aa9 OpenPGP: set pin references to 0x01 - 0x03
Set pin references to 0x01 - 0x03 instead of 0x81 - 0x83.
The PINs are referenced as PIN1- PIN3 (resp. PW1 - PW3) in the OpenPGP
card specification.
Technically the APDUs to verify/change the PINs contain the values OR-ed
with 0x80, but this is just a technical detail of the implementation
which the emulated file system can hide in pgp_pin_cmd().

Pros & Cons:
+ consistent PIN naming
+ no trouble entering the correct PIN names in opensc-explorer et.al.
  ("verify CHV1" is way better than "verify CHV129")
- manually entering the correct APDU for VERIFY is a bit more complex.
  (who does this anyway, when there are better functions)

While at it, change if .. elsif ... cascade to switch statement.
2012-06-08 20:17:35 +02:00
hongquan f515ed5be3 OpenPGP: Change the criteria to use ext APDU for put data.
Saner whitespace in logs
Correct spelling
2012-06-08 20:17:35 +02:00
hongquan df39590aa4 OpenPGP: Correct adding read access to ACL. 2012-06-08 20:17:35 +02:00
hongquan e269907e1d OpenPGP: support key generation in driver. 2012-06-08 20:17:35 +02:00
Nguyễn Hồng Quân 9dd5a64d43 OpenPGP: Support another variant of PUT DATA to write to Extended Header list. 2012-06-08 20:17:35 +02:00
Nguyễn Hồng Quân fefe8bf2e6 OpenPGP: Check data size in pgp_put_data. 2012-06-08 20:17:35 +02:00
Nguyễn Hồng Quân f188a5dda3 OpenPGP: Implement pgp_update_binary() to update file content. 2012-06-08 20:17:35 +02:00
Nguyễn Hồng Quân 935a7505d7 OpenPGP: Add Access Control List for emulated files. 2012-06-08 20:17:35 +02:00