Coder Social home page Coder Social logo

esteid.js's Introduction

1674679905811

Hi there πŸ‘‹

This is Martin from πŸ‡ͺπŸ‡ͺ Estonia πŸ‡ͺπŸ‡Ί. Every now and then I push code to Github, that scratches my own itches (remembering Kerckhoff's principle!).

Most probably you're here because of the "open source javacard software development toolkit" that consists of

πŸ›œ NFC/NDEF and πŸ”‘ FIDO/WebAuthn are topics where you can expect developments in 2024.

There are also historical bits and pieces related to generic smart cards (PC/SC, CCID) and crypto with Java/JavaScript/PKCS#11, and Estonian eID and identity (OpenID etc) in general.

When it comes to Estonian eID, most of what I worked on has been continued by others: @OpenSC (open source PKCS#11 and native platform crypto drivers for smart cards), @web-eid (modern WebExtensions based authentication and signing for desktop browsers) and @open-eid (ages ago I pushed Estonia to publish (most of) it's eID client software as open source)

Feel free to πŸ’¬ book a call if you have any questions or ongoing projects in these domains or to πŸ™ sponsor my open source work!

News

[Google Open Source Peer Bonus for GlobalPlatformPro]

esteid.js's People

Contributors

martinpaljak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

esteid.js's Issues

decrypt function is missing PIN promise/check

Here is a patch, should I create a pull request?

--- ../esteid-dev/esteid.js    2017-04-29 15:46:20.000000000 +0300
+++ esteid.js   2017-04-27 10:59:02.000000000 +0300
@@ -242,8 +242,16 @@
             header[0] = chunks.length === 0 ? 0x00 : 0x10
             header[4] = chunk.length
             var cmd = Buffer.concat([header, chunk, Buffer.from([0x00])])
-            apdu.check(transmit(cmd)).then(function (r) {
-              if (chunks.length === 0) { return resolve(apdu.data(r)) } else { return decr() }
+            // verify PIN1 and decrypt
+            return eid.verify(eid.PIN1, pin).then(function () {
+              apdu.check(transmit(cmd)).then(function (r) {
+                if (chunks.length === 0) {
+                  return resolve(apdu.data(r))
+                }
+                else {
+                  return decr()
+                }
+              })
             }).catch(function (reason) {
               console.log('Decryption failed')
               reject(reason)

'npm test pcsc' not works

Running npm test pcsc results in error. Error happening in the EstEID.authenticate method call:

pavlovdog@local:~/esteid.js$ npm test pcsc

> [email protected] test /home/pavlovdog/esteid.js
> node test-node.js "pcsc"

EstEID v0.0.5
                                
                                   β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     β–ˆβ–ˆβ–ˆ        β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–„β–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–„
                                  β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ   β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ β–€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–„   β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆ   β–€β–ˆβ–ˆβ–ˆ
                                  β–ˆβ–ˆβ–ˆ    β–ˆβ–€    β–ˆβ–ˆβ–ˆ    β–ˆβ–€     β–€β–ˆβ–ˆβ–ˆβ–€β–€β–ˆβ–ˆ   β–ˆβ–ˆβ–ˆ    β–ˆβ–€  β–ˆβ–ˆβ–ˆβ–Œ β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ
                                 β–„β–ˆβ–ˆβ–ˆβ–„β–„β–„       β–ˆβ–ˆβ–ˆ            β–ˆβ–ˆβ–ˆ   β–€  β–„β–ˆβ–ˆβ–ˆβ–„β–„β–„     β–ˆβ–ˆβ–ˆβ–Œ β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ
                                β–€β–€β–ˆβ–ˆβ–ˆβ–€β–€β–€     β–€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     β–ˆβ–ˆβ–ˆ     β–€β–€β–ˆβ–ˆβ–ˆβ–€β–€β–€     β–ˆβ–ˆβ–ˆβ–Œ β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ
                                  β–ˆβ–ˆβ–ˆ    β–ˆβ–„           β–ˆβ–ˆβ–ˆ     β–ˆβ–ˆβ–ˆ       β–ˆβ–ˆβ–ˆ    β–ˆβ–„  β–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ
                                  β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ    β–„β–ˆ    β–ˆβ–ˆβ–ˆ     β–ˆβ–ˆβ–ˆ       β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆ   β–„β–ˆβ–ˆβ–ˆ
                                  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–€     β–„β–ˆβ–ˆβ–ˆβ–ˆβ–€     β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–€   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–€
                                
                                     EstEID for JS, version 0.0.5 by github.com/@martinpljak
                                                           
                                                           
                                                           
                                                           
Please connect a card reader and insert a card
READER  ACS ACR 38U-CCID 00 00
CARD ACS ACR 38U-CCID 00 00
Card in ACS ACR 38U-CCID 00 00 matches (3bfe1800008031fe45803180664090a4162a00830f9000ef)!
Personal data: {
  "SURNAME": "**********",
  "GIVEN_NAMES1": "**********",
  "GIVEN_NAMES2": "",
  "SEX": "M",
  "CITIZENSHIP": "**********",
  "DATE_OF_BIRTH": "**********",
  "PERSONAL_ID": "**********",
  "DOCUMENT_NR": "**********",
  "EXPIRY_DATE": "**********",
  "PLACE_OF_BIRTH": "**********",
  "ISSUING_DATE": "**********",
  "PERMIT_TYPE": "",
  "REMARK1": "**********",
  "REMARK2": "",
  "REMARK3": "",
  "REMARK4": ""
}
PIN retry counters:
PIN1=3 PIN2=3 PUK=3
Do PIN verification tests [y/n]: n
Certificate: **********,**********,********** digital signature
Certificate: **********,**********,********** authentication
Please enter PIN1: ****
Authentication failed:  Error: APDU SW check failed, SW 0x6700 not in 0x9000
    at /home/pavlovdog/esteid.js/apdu.js:59:13
    at <anonymous>
Some of the tests failed Error: APDU SW check failed, SW 0x6700 not in 0x9000
    at /home/pavlovdog/esteid.js/apdu.js:59:13
    at <anonymous>
Application failed Error: APDU SW check failed, SW 0x6700 not in 0x9000
    at /home/pavlovdog/esteid.js/apdu.js:59:13
    at <anonymous>
npm ERR! Test failed.  See above for more details.

I've replaced all sensetive information with **********. My specs:

$ uname -a
Linux local 4.15.0-24-generic #26~16.04.1-Ubuntu SMP Fri Jun 15 14:35:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ node -v
v8.11.3
$ npm -v
5.6.0

npm install not works - `node-gyp rebuild` error

I'm trying to follow all the instructions from the README and install module after cloning the repo. But there's an error on the npm install:

$ npm install

> [email protected] install /home/pavlovdog/esteid.js/node_modules/x509
> node-gyp rebuild

make: Entering directory '/home/pavlovdog/esteid.js/node_modules/x509/build'
  CXX(target) Release/obj.target/x509/src/addon.o
In file included from ../../nan/nan.h:194:0,
                 from ../include/x509.h:7,
                 from ../src/addon.cc:5:
../../nan/nan_maybe_43_inl.h: In function β€˜Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Value>, v8::PropertyAttribute)’:
../../nan/nan_maybe_43_inl.h:88:15: error: β€˜class v8::Object’ has no member named β€˜ForceSet’
   return obj->ForceSet(GetCurrentContext(), key, value, attribs);
               ^
../../nan/nan_maybe_43_inl.h: In function β€˜Nan::MaybeLocal<v8::Object> Nan::CloneElementAt(v8::Local<v8::Array>, uint32_t)’:
../../nan/nan_maybe_43_inl.h:220:17: error: β€˜class v8::Array’ has no member named β€˜CloneElementAt’
   return array->CloneElementAt(GetCurrentContext(), index);
                 ^
In file included from ../../nan/nan_new.h:189:0,
                 from ../../nan/nan.h:200,
                 from ../include/x509.h:7,
                 from ../src/addon.cc:5:
../../nan/nan_implementation_12_inl.h: In static member function β€˜static Nan::imp::FactoryBase<v8::BooleanObject>::return_t Nan::imp::Factory<v8::BooleanObject>::New(bool)’:
../../nan/nan_implementation_12_inl.h:40:38: error: no matching function for call to β€˜v8::BooleanObject::New(bool&)’
   return v8::BooleanObject::New(value).As<v8::BooleanObject>();
                                      ^
In file included from /home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:63:0,
                 from ../include/addon.h:4,
                 from ../src/addon.cc:4:
/home/pavlovdog/.node-gyp/10.6.0/include/node/v8.h:4948:23: note: candidate: static v8::Local<v8::Value> v8::BooleanObject::New(v8::Isolate*, bool)
   static Local<Value> New(Isolate* isolate, bool value);
                       ^
/home/pavlovdog/.node-gyp/10.6.0/include/node/v8.h:4948:23: note:   candidate expects 2 arguments, 1 provided
In file included from ../../nan/nan_new.h:189:0,
                 from ../../nan/nan.h:200,
                 from ../include/x509.h:7,
                 from ../src/addon.cc:5:
../../nan/nan_implementation_12_inl.h:40:60: error: expected primary-expression before β€˜>’ token
   return v8::BooleanObject::New(value).As<v8::BooleanObject>();
                                                            ^
../../nan/nan_implementation_12_inl.h:40:62: error: expected primary-expression before β€˜)’ token
   return v8::BooleanObject::New(value).As<v8::BooleanObject>();
                                                              ^
In file included from ../include/x509.h:7:0,
                 from ../src/addon.cc:5:
../../nan/nan.h: In function β€˜v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:821:60: warning: β€˜v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../include/addon.h:4:0,
                 from ../src/addon.cc:4:
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:172:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:88:42: note: in definition of macro β€˜NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^
In file included from ../include/x509.h:7:0,
                 from ../src/addon.cc:5:
../../nan/nan.h: In function β€˜v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:835:62: warning: β€˜v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../include/addon.h:4:0,
                 from ../src/addon.cc:4:
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:165:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:88:42: note: in definition of macro β€˜NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^
In file included from ../include/x509.h:7:0,
                 from ../src/addon.cc:5:
../../nan/nan.h: In function β€˜v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:849:62: warning: β€˜v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../include/addon.h:4:0,
                 from ../src/addon.cc:4:
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:158:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:88:42: note: in definition of macro β€˜NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^
In file included from ../include/x509.h:7:0,
                 from ../src/addon.cc:5:
../../nan/nan.h: In member function β€˜v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const’:
../../nan/nan.h:1467:5: warning: β€˜v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../include/addon.h:4:0,
                 from ../src/addon.cc:4:
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:172:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^
/home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:88:42: note: in definition of macro β€˜NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^
In file included from ../include/x509.h:7:0,
                 from ../src/addon.cc:5:
../../nan/nan.h: In function β€˜bool Nan::SetAccessor(v8::Local<v8::Object>, v8::Local<v8::String>, Nan::GetterCallback, Nan::SetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute)’:
../../nan/nan.h:1969:16: error: no matching function for call to β€˜v8::Object::SetAccessor(v8::Local<v8::String>&, void (*&)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&), void (*&)(v8::Local<v8::Name>, v8::Local<v8::Value>, const v8::PropertyCallbackInfo<void>&), v8::Local<v8::Object>&, v8::AccessControl&, v8::PropertyAttribute&)’
     , attribute);
                ^
In file included from /home/pavlovdog/.node-gyp/10.6.0/include/node/node.h:63:0,
                 from ../include/addon.h:4,
                 from ../src/addon.cc:4:
/home/pavlovdog/.node-gyp/10.6.0/include/node/v8.h:3266:37: note: candidate: v8::Maybe<bool> v8::Object::SetAccessor(v8::Local<v8::Context>, v8::Local<v8::Name>, v8::AccessorNameGetterCallback, v8::AccessorNameSetterCallback, v8::MaybeLocal<v8::Value>, v8::AccessControl, v8::PropertyAttribute, v8::SideEffectType)
   V8_WARN_UNUSED_RESULT Maybe<bool> SetAccessor(
                                     ^
/home/pavlovdog/.node-gyp/10.6.0/include/node/v8.h:3266:37: note:   no known conversion for argument 2 from β€˜Nan::imp::NativeGetter {aka void (*)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&)}’ to β€˜v8::Local<v8::Name>’
x509.target.mk:102: recipe for target 'Release/obj.target/x509/src/addon.o' failed
make: *** [Release/obj.target/x509/src/addon.o] Error 1
make: Leaving directory '/home/pavlovdog/esteid.js/node_modules/x509/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
gyp ERR! System Linux 4.15.0-24-generic
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pavlovdog/esteid.js/node_modules/x509
gyp ERR! node -v v10.6.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pavlovdog/.npm/_logs/2018-07-12T13_05_42_226Z-debug.log

How can I fix it? I have already tried to remove ~/.node-gyp, node_modules and run npm update - didn't help, same error?

P.S. I'm using Ubuntu 16.04

$ uname -a
Linux local 4.15.0-24-generic #26~16.04.1-Ubuntu SMP Fri Jun 15 14:35:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ node -v
v10.6.0
$ npm -v
6.1.0

macOS sierra: SCardConnect sharing violation

on macOS sierra node test.js runs fine the first time but consecutive runs produce SCardConnect sharing violation error:

Please connect a card reader and insert a card
READER OMNIKEY CardMan 1021
CARD OMNIKEY CardMan 1021
Card in OMNIKEY CardMan 1021 matches (3bfe1800008031fe45803180664090a4162a00830f9000ef)!
Error: SCardConnect error: Sharing violation.(0x8010000b)
at Error (native)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.