Commit Graph

4717 Commits

Author SHA1 Message Date
Frank Morgner 4459e146c4 use util_get_pin in tools 2014-11-04 22:07:07 +01:00
Sumedha Widyadharma e63f40c2d3 tools: Add util_get_pin helper function
Using this helper PINs can be passed via the command line, stdin and an
environment variable.

For now only used in the openpgp tool.

closes #289
2014-11-04 21:54:41 +01:00
Andreas Schwier d014056f1d sc-hsm: Add support for Koblitz curves secp192k1 and secp256k1 (Bitcoin) 2014-11-04 17:11:34 +01:00
Doug Engert 7a5f9b2a16 Merge pull request #315 from dengert/privateObjects
Public certs and pubkeys with an auth_id are treated as private (See #291)
2014-11-04 07:28:37 -06:00
Shaun Schutte ccd87e7c0c Added ATR for ItalianCNS - Prov. BZ 2014-11-04 09:01:36 +01:00
Andreas Schwier b2dcae34ca Fix Lc byte in VERIFY PIN block for PC/SC PIN PAD reader 2014-11-03 16:11:29 +01:00
Doug Engert fd22098e19 Public certs and pubkeys with an auth_id are treated as private (See #291)
Code to test for an auth_id for certs and pubkeys was removed.
See: PKCS#15 section 4.1.3 Access methods

This is conseritive change and all objects could be treaded the same.
2014-11-01 14:02:39 -05:00
Frank Morgner d3c8fbcf1d fixed type of pkcs15init_initialize
regression from 95b6b4cc
2014-10-27 23:22:40 +01:00
Frank Morgner 3d9118a870 changed sc_apdu_t.data back to const unsigned char * 2014-10-27 22:48:34 +01:00
Doug Engert 189e998486 PKCS#11 hashes for cards without RAW (see #241)
The framework-pkcs15.c did not add hashes correctly if the card did not support RSA RAW.
    This change fixes that and only adds hashes if the card did not specify a list of hashes.
    It also will not add hashes done in software if ENABLE_OPENSSL is not specified.
    Some error conditions are also tested for EC mechanisms.

    See bug report #241 for more information.
2014-10-13 10:29:27 -05:00
Doug Engert 9a82a95132 Merge branch 'master' of github.com:OpenSC/OpenSC 2014-10-03 06:50:04 -05:00
Ludovic Rousseau 34587eac9c Fix compiler warning
p15card-helper.c:23:5: warning: 'ENABLE_OPENSSL' is not defined, evaluates to 0
      [-Wundef]
    ^
2014-10-01 22:11:38 +02:00
Ludovic Rousseau 09c2847b7e Fix compiler warning
pkcs15-dnie.c:242:13: warning: function declaration isn't a prototype [-Wstrict-prototypes]
 const char *sc_driver_version()
             ^
2014-10-01 22:11:38 +02:00
Ludovic Rousseau c8545baf90 pkcs15-dnie: fix compilation when OpenSSL is not used
If OpenSSL is not used then the functions from card-dnie.c are not
defined and in particular dnie_match_card() is not defined.
In that case we use a fake dnie_match_card() that just returns false.
2014-10-01 22:11:38 +02:00
Philip Wendland 955a339148 Merge PR#288 from philipWendland:upstream-ecc-fix
add the possibility to store public ECC keys encoded according to SPKI
EC pubkey storing: Check if params are available before copying.
pkcs15-lib.c / sc_pkcs15init_store_public_key may be called with keyargs->key.u.ec.params.value == NULL. In this case, allocating and copying the parameters will fail. Add a check to prevent this.
2014-10-01 15:27:26 +02:00
Dirk-Willem van Gulik 4e73d0e36f Merge PR#280 from dirkx/master: --no-prompt flag
Add a --no-prompt flag to pkcs15-tool (i.e. the equivalent of the --no-prompt flag of pkcs15-init). As to aid readers with keypads (as commonly used in the medical space).
2014-10-01 14:36:52 +02:00
Ludovic Rousseau ea712bfd56 Fix compiler warning
The same function iasecc_sm_external_authentication() was declared in
two different .h files.

In file included from ../../src/libopensc/iasecc.h:27:0,
                 from sm-card-iasecc.c:44:
../../src/libopensc/iasecc-sdo.h:324:5: warning: redundant redeclaration of `iasecc_sm_external_authentication' [-Wredundant-decls]
In file included from ../../src/libopensc/opensc.h:44:0,
                 from sm-card-iasecc.c:40:
../../src/libopensc/sm.h:352:5: note: previous declaration of `iasecc_sm_external_authentication' was here
2014-09-29 16:08:33 +02:00
Doug Engert cb89a870ae Merge pull request #280 from shootingatshadow/aes-support
Remove hardcodes from Mutual Authenticate
2014-09-18 16:32:21 -05:00
Andreas Schwier be200ab3c8 Merge pull request #282 from CardContact/fix-deleted-related-public-key
framework-pkcs15: Duplicate public key related to private key rather than referencing the framework object

Referencing the related public key is required to return PKCS#11 attributes for a private key only available
in the public key object (i.e. CKA_MODULUS). This patch adds a copy of the public key to the private key object rather than
referencing the public key object in the framework. This prevents SEGV when the public key framework object
is deleted with C_DestroyObject, but the reference from the public key remains intact.

The bug leads to all kind of stability problems when keys are created and deleted in the same session.

The patch is in particular important if OpenSC is used with EJBCA or any other application using the
SUN PKCS#11 provider: When generating key pairs, then the public key object is eventually garbage collected
which removes the related object in the PKCS#11 module. Because there is no fixed time for this operation,
corruption occurs at random.

In a next step, the remaining related_xxx fields in sc_pkcs11_object should be revised and possibly removed.

framework: Added more error checking
2014-09-07 23:47:24 +02:00
Andreas Schwier 7db99500a0 sc-hsm: Fix certificate delete bug
If a certificate is deleted after the related private key, then the driver
picks the wrong certificate EF, leading to an CKR_GENERAL_ERROR or the wrong
certificate being deleted.
2014-09-07 23:10:48 +02:00
Andreas Schwier f9b8b2c220 sc-hsm: Added error if private key import tried
Private key import is not supported by the SmartCard-HSM. However there is no error code
if it is still tried using pkcs15-init or from within Firefox.
2014-09-07 23:10:48 +02:00
Andreas Schwier 08f07adf59 sc-hsm: Improve error detection and reporting in sc-hsm-tool 2014-09-07 23:02:08 +02:00
Sumedha Widyadharma 1fc0a7e7d6 Merge pull request #274 from github-asmw/private-do-3
openpgp-tool: Added PRIVATE-DO-3 dump option

The bytes of private-do-3 will be written to stdout raw.
Requires pin and verify to work.

openpgp-tool: Fix private-do-3 dump for Windows

fwrite will convert line endings on Windows if the destination
is not openend in binary mode. As this actually dumps binary data,
it makes sense to reopen stdout in binary mode for the dump.

openpgp-tool: Enable dumping of all DOs

PRIVATE-DO-<X> can now be dumped via the -d/--do switches and
the DO number as a parameter.
PRIVATE-DO-[12] can be dumped without verification.
PRIVATE-DO-3 requires CHV2, PRIVATE-DO-4 CHV3.

openpgp-tool: Dump DOs as hex into a tty, binary otherwise

This prevents messing up a terminal if there really _is_
binary data in a private DO. To force the binary data to a terminal,
pipe through cat.

openpgp-tool: Hint at the pin and verify options on error

SC_ERROR_SECURITY_STATUS_NOT_SATISFIED is the error code
here when dumping a private DO without the appropriate verification.

openpgp-tool: Explictly use --raw for binary ouput

The --raw switch already exists. If present, raw binary will be written,
a pretty-printed hex/ascii representation otherwise.
2014-09-07 22:32:13 +02:00
andbil 139333f85a Fix error when signing with Swedish BankID card
Added card type check in addition to check for SC_SEC_ENV_KEY_REF_PRESENT

Added card type check in addition to check for SC_SEC_ENV_KEY_REF_PRESENT
2014-09-07 22:19:00 +02:00
Frank Morgner bb160bfd99 pkcs15-tool: fixed file reading 2014-09-07 22:13:04 +02:00
Andreas Schwier e6505b3d9c pkcs11: Fixed wrong reference to PIN object in C_SetPIN() for SO-PIN 2014-09-07 22:11:39 +02:00
Frank Morgner ed73851c41 fixed pkcs15 version check 2014-09-07 22:06:11 +02:00
Frank Morgner 5d6c4b391d Merge pull request #253 from github-frankmorgner/remove-deadcode
card-asepcos: removed dead code
card-authentic: removed dead code
card-belpic: removed dead code
card-epass2003: removed dead code
card-flex: removed dead code
card-gpk: removed dead code
card-oberthur: removed dead code
card-piv: removed dead code
card-setcos: removed dead code
ctbcs: removed dead code
cwa14890: removed dead code
muscle: removed dead code
pkcs15-atrust-acos: removed dead code
pkcs15-gemsafeV1: removed dead code
pkcs15-skey: removed dead code
reader-ctapi: removed dead code
framework-pkcs15: removed dead code
pkcs11-object: removed dead code
pkcs15-asepcos: removed dead code
pkcs15-cardos: removed dead code
pkcs15-jcop: removed dead code
pkcs15-lib: removed dead code
pkcs15-oberthur: removed dead code
parse: removed dead code
sclex: removed dead code
sm-card-authentic: removed dead code
sm-card-iasecc: removed dead code
sm-cwa14890: removed dead code
sm-global-platform: removed dead code
sc-test: removed dead code
pkcs11-tool: removed dead code
pkcs15-tool: removed dead code
2014-09-07 21:22:43 +02:00
William Roberts 3a0ca5aa7d Remove hardcodes from Mutual Authenticate
Support nonces that are not only 8 bytes in
Mutual Authenticate. Use the witness length
to determine the nonce size, thus existing
systems using 8 bytes will continue to use 8
bytes. However, with AES 256, the nonces could
be a single block size of 16 bytes or greater.
2014-09-03 10:53:30 -07:00
Doug Engert b84a1c9a90 Merge branch 'master' of github.com:OpenSC/OpenSC 2014-09-02 16:37:45 -05:00
Frank Morgner 87d430f300 iso7816: propagate the length of the computed signature 2014-08-26 21:21:26 +02:00
Doug Engert 2de38a1230 pkcs11-tool sets CKA_DECRYPT=true rather then CKA_DERIVE=true when generating EC keys (#277)
RSA and EC keys have different usage attributes. Appropriate attributes are set
When using --keypairgen the user can use the --usage-sign, --usage-decrypt,
and --usage-derive. to get finer control.

 Changes to be committed:
	modified:   tools/pkcs11-tool.c
2014-08-26 09:59:40 -05:00
William Roberts 295c523e4e Add AES support for PIV General Authenticate
This adds algorithm IDs 0xA, 0xA, 0xC which as documented
by the NIST PIV specification is algorithms AES-128, AES-192
and AES-256 respectively.

This patch also addresses some of the hardcodes that prevented
nonces greater than the single byte TLV length tags would allow.
It was explicitly tested with AES-256 and 256 byte nonces.

Signed-off-by: William Roberts <w2.roberts@samsung.com>
2014-08-25 18:27:13 -07:00
Sumedha Widyadharma d13549600d openpgp-tool: Return EXIT_SUCCESS if no error occurs
exit_status is either set directly or a function return is ORed with it,
in which case EXIT_SUCCESS can never be returned if the initial value is !=
0;
2014-08-20 21:53:25 +02:00
Andreas Schwier 5279bfa2d1 sc-hsm: Prevent double-free crash if key generation fails
Fixes #262 (SEGV when reader does not support extended length ADPU)
2014-07-09 14:27:08 +02:00
Frank Morgner bb92019e53 iso7816: allow extended length APDUs 2014-06-27 08:26:35 +02:00
Andreas Schwier 440289a091 sc-hsm: reduce indicated maximum PIN length to 15
Fix bogus minimum PIN length to support more PIN pad readers
2014-06-26 17:57:26 +02:00
Frank Morgner 35b74f3923 fixed warning unused variable 2014-06-09 16:03:14 +02:00
Frank Morgner 359660c454 dnie: removed dead and untested SM wrapping code 2014-06-09 15:48:20 +02:00
Andreas Schwier 072dfeb71c sc-hsm-tool: Fixed SEGV if no or invalid card in reader 2014-06-09 15:05:42 +02:00
Henryk Plötz b1b5a39ffa Use sc_pkcs15_find_pin_by_auth_id() in asepcos_create_key() to correctly set the newly created key up for use with the configured PIN. 2014-06-06 18:46:48 +02:00
Nikos Mavrogiannopoulos 77d8fa390d base64 decoding: Do not assume that char is signed.
In the systems where char is unsigned by default the base64 decoding
would crash.
2014-06-06 11:06:09 +02:00
Joachim Bauch 2f6b5174a8 Support "D-TRUST card 2.4 2ce". 2014-06-06 10:25:24 +02:00
Viktor Tarasov 3f13f571c0 openpgp-tool: issue-220: read and display OpenPGP data 2014-06-01 19:42:01 +02:00
Emanuele Pucciarelli ee0566af09 pkcs11: pr-239: PKCS15 pubkey release fix 2014-06-01 18:55:56 +02:00
Raul Metsma 77c71be833 Don't depend configuration default value 2014-05-31 21:15:19 +02:00
Raul Metsma ccf6da2dbe Add windows onepin makefile 2014-05-31 21:15:19 +02:00
Raul Metsma 8e13acf51e Restore pkcs11 onepin module for Firefox usage 2014-05-31 21:15:19 +02:00
Henrik Andersson de6d61405b Dont use sha256 if openssl is older than 0.9.8. 2014-05-14 22:11:31 +02:00
Henrik Andersson 1df8570a66 Add fence against using EVP_sha256 mech.
Which is only available in >=0.9.8
2014-05-14 22:11:25 +02:00
Viktor Tarasov e41d94ca1a md: fix return code in 'CardGetContainerInfo' 2014-05-13 18:34:18 +02:00
Viktor Tarasov 808fff2246 pkcs11: take pubkey CKA_VALUE from pub_data 2014-05-13 18:34:09 +02:00
Viktor Tarasov b6ad7a92f5 pkcs11: more of debug messages 2014-05-13 18:33:58 +02:00
Frank Morgner 5f45739ecb fixed one more warning 2014-05-03 22:24:06 +02:00
Frank Morgner e1fd9d2a4c cardos,incrypto34: restored semantics of select_pin_reference 2014-05-03 22:24:06 +02:00
Frank Morgner 511c8e6382 dnie: dont ignore error on sm free operation
Signed-off-by: Frank Morgner <morgner@informatik.hu-berlin.de>
2014-05-03 22:24:06 +02:00
Frank Morgner b483d1d27d
westcos: fixed initialization of driver data
Signed-off-by: Frank Morgner <morgner@informatik.hu-berlin.de>

Updated by Viktor Tarasov
2014-05-03 22:23:40 +02:00
Frank Morgner 3b50ccc0ea fixed incompatible function usage
Signed-off-by: Frank Morgner <morgner@informatik.hu-berlin.de>
2014-05-03 21:54:40 +02: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
Viktor Tarasov 883d42b1f8 libopensc: export 'iasecc_sdo_encode_update_field'
used by 'local SMM' module
2014-05-02 13:43:10 +02:00
Martin Paljak 8d000774df EstEID: match card only based on presence of application.
Contact cards have ATR-s, contactless not. Only contact
cards should be broken so that they answer 0x9000 to application
selection, so this should be failsafe.
2014-04-21 21:05:11 +02:00
Nikos Mavrogiannopoulos ba66459f33 When setting pointers to a template, ensure they do not get out of scope prior of being used.
This was causing issues when using pkcs11-tool with opencryptoki:
https://bugzilla.redhat.com/show_bug.cgi?id=1062307

Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
2014-04-21 20:47:39 +02:00
Frank Morgner 46b0bed93f fixed PUK handling
Note that
`SC_PKCS15_PIN_AUTH_TYPE_PIN` is used for `sc_pkcs15_auth_info_t.auth_type`
`SC_PKCS15_TYPE_AUTH_PIN`     is used for `sc_pkcs15_object_t.type`
2014-04-21 20:43:41 +02:00
Nikos Mavrogiannopoulos 218d198bdc Call dlclose() only when having a valid handle.
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
2014-04-21 20:23:11 +02:00
Henrik Andersson fc5714a4c9 Set missing default create_slots_flags.
Without this pkcs11 cant be used without a configuration file
or a configfile without pkcs11 block due to the missing initialization
of default flag.
2014-04-21 13:53:57 +02:00
Martin Paljak 332ced5be7 Remove the bogus javacard "driver".
I had some ideas on how to improve the experience for JavaCards
but that path did not get implemented further and my approach now
is very different.

While it would be nice if OpenSC (command line) detected
somehow blank JavaCard-s and informed the user that steps a-b-c
should be taken to make use of it, it doesn't really fit in.
2014-04-21 13:44:27 +02:00
Raul Metsma e7cda857f0 Fix memory leak, sc_pkcs15_cert_t *cert is never freed 2014-04-21 13:31:06 +02:00
Ludovic Rousseau cdc379fa25 pkcs11-tool: check for buffer overflows
Check the subject, issuer and serialNumber will encode in the allocated
space before copying the data.

Thanks to Umberto Rustichelli for the bug report
https://sourceforge.net/p/opensc/mailman/message/32210626/
2014-04-10 16:40:12 +02:00
Martin Paljak 8b4125e79d Merge pull request #213 from martinpaljak/default-driver
Default driver: do not send possibly arbitrary APDU-s to an unknown card...
2014-03-16 16:35:38 +00:00
Viktor Tarasov 8871e61596 pkcs15: change names of internal SPKI procedures
sc_pkcs15_pubkey_from_spki_sequence() takes the ASN1 'subjectPublicKeyInfo' data
sc_pkcs15_pubkey_from_spki_fields() takes the ASN1 'subjectPublicKeyInfo' data without outter SEQUENCE tag
2014-02-16 22:35:52 +01:00
Viktor Tarasov 53eae613d4 pkcs15: remove not used internal procedures
sc_pkcs15_copy_pubkey_from_spki_object() not used
2014-02-16 22:11:39 +01:00
Martin Paljak 3acb3d8e60 Default driver: do not send possibly arbitrary APDU-s to an unknown card. 2014-02-14 11:53:10 +00:00
Viktor Tarasov 345d4b905c PIV: encode SPKI public key data 2014-02-09 18:49:58 +01:00
Viktor Tarasov 72bf7a8593 pkcs15init: NULL 'store-key' hahdle
Card driver can not define 'store-key' init handle
2014-02-09 18:49:58 +01:00
Viktor Tarasov 12d362fc73 PIV: fix segfault and valgrind issue
prototype of 'get-guid' has been changed;

valgrind issue:
Conditional jump or move depends on uninitialised value(s)
   at 0x5A0159B: vfprintf (vfprintf.c:1629)
   by 0x5AC04BF: __vsnprintf_chk (vsnprintf_chk.c:65)
   by 0x522A665: sc_do_log_va.part.0 (stdio2.h:78)
   by 0x522A819: sc_do_log (log.c:52)
   by 0x529462F: piv_card_ctl (card-piv.c:1794)
   by 0x5232E2F: sc_card_ctl (card.c:772)
   by 0x52E561D: sc_pkcs15emu_piv_init (pkcs15-piv.c:626)
2014-02-09 18:49:58 +01:00
Viktor Tarasov 8000564239 pkcs15: fix encoding of 'SubjectPublicKeyInfo' 2014-02-09 18:49:58 +01:00
Viktor Tarasov dd5115bc02 pkcs15: use 'direct' public key value
pkcs15: in pubkey-info data
 * introduced new 'direct' 'raw' and 'spki' members
 * removed 'encoded der data' member
 * in 'read-public-key' try firstly SPKI direct value

pkcs11:
'direct' data used when getting CKA_VALUE attribute of public key

pkcs15init:
 * initialize 'raw' and 'spki' direct public key value
2014-02-09 18:49:58 +01:00
Viktor Tarasov 343a627c78 pkcs15init: set EC pubkey key params using init arguments 2014-02-09 18:49:58 +01:00
Viktor Tarasov 122c58de85 pkcs15init: do not use 'der-data' of pubkey data 2014-02-09 18:49:58 +01:00
Viktor Tarasov efa6e852c2 myeid: support of EC key is broken,
waiting for specification and card from Aventra (VTA)
2014-02-09 18:49:58 +01:00
Viktor Tarasov 2f8fc498ae sc-hsm: emu: initialize EC key params
;fix EC parameters for the emulated public keys
;add 'sc-context' argument in some function prototypes
2014-02-09 18:49:58 +01:00
Viktor Tarasov 1775198ed7 pkcs11-tool: format object info output 2014-02-09 18:49:58 +01:00
Viktor Tarasov 032a3ece20 pkcs15init: ignore if no TokenInfo file to update 2014-02-09 11:59:26 +01:00
Doug Engert c5c49e3fd4 sc_pkcs15_encode_pubkey_as_spki depends on DER encoded RAW key
Make sure the sc_pkcs15_pubkey structure contains the DER endoding
of the RAW public key before trying to produce the SPKI version.
2014-01-19 19:30:04 +01:00
Viktor Tarasov 46c86fcb66 coding style: use short form of debug macros 2014-01-19 19:19:17 +01:00
Viktor Tarasov 3f023d3342 pkcs15: PIN value not validated in pkcs15-verify
In pkcs15-verify the value of PIN is not more validated for conformity with PIN policy,
value is only checked for maximal allowed length.

So that, no more need of 'ignore-pin-length' configuration option - now it's default behavior of common framework.
2014-01-19 19:19:17 +01:00
Viktor Tarasov 0efe1ec05e coding style: remove trailing spaces 2014-01-19 19:19:17 +01:00
Viktor Tarasov 085f971f95 pkcs15init: iasecc: fix uncomplete merge
prototype of sc_pkcs15_get_object_guid has been changed
2014-01-19 19:19:17 +01:00
Viktor Tarasov 5437f87d4b pkcs15: encode public key algorithm (issue 202)
coding style: use linux style line break
2014-01-13 13:02:08 +01:00
Viktor Tarasov 3d3592ab28 pkcs15-tool: remove unused 'pubkey_pem_encode()'
used instead the sc_pkcs15_encode_pubkey_as_spki()
2014-01-13 12:48:16 +01:00
Andreas Schwier 67dc60f707 sc-hsm: Added support for persistent EC public keys generated from certificate signing requests 2014-01-09 21:41:12 +01:00
Andreas Schwier 9e54756e1b sc-hsm: Added support to unblock PIN using C_InitPIN() 2014-01-08 19:32:53 +01:00
Andreas Schwier d1ba6164ad sc-hsm: Added support for token label to be set via C_InitToken or sc-hsm-tool 2014-01-08 16:07:13 +01:00
Ludovic Rousseau abb48c8ba7 reader-pcsc: fix compiler warning
Add a missing "const" for a constant C-string

reader-pcsc.c: In function `detect_reader_features':
reader-pcsc.c:926:20: warning: initialization discards `const' qualifier from pointer target type [enabled by default]
2014-01-06 15:36:50 +01:00
Ludovic Rousseau c6d3b3b086 reader-pcsc: fix verify/modify pinpad commands
The PC/SC v2 part 10 commands for PIN verify and modify were wrong after
a change in pcsc-lite.
See a similar change in http://lists.alioth.debian.org/pipermail/pcsclite-cvs-commit/2013-December/006364.html

Should fix issue #199
2014-01-06 15:28:22 +01:00
Jonathan Süssemilch Poulain ab814380cf Adds support for a Swedish eID card 2014-01-01 20:22:17 +01:00
Viktor Tarasov 034cff91d8 pkcs15: unify error codes of 'internal' and 'syntetic' binds
if no valid PKCS#15 file system found
  'internal' bind procedure returns 'non-supported-card' error
  the same as 'syntetic' bind procedure.
  this return code is used by pkcs11 framework to accept non-binded cards

some codding style issues
2014-01-01 18:21:06 +01:00
Viktor Tarasov 3ab84b3b35 log: no format for the short arrays in 'hex-dump' 2014-01-01 18:21:05 +01:00
Viktor Tarasov 0fa475ee5f build: define in configure.ac.in the common fields of version-info 2013-12-30 10:31:21 +01:00
Viktor Tarasov aec6f99ff4 win32: build: add 'VarFileInfo' block to version-info 2013-12-29 22:00:29 +01:00