webcrypto-liner icon indicating copy to clipboard operation
webcrypto-liner copied to clipboard

Installation/usage?

Open lougreenwood opened this issue 6 years ago • 11 comments

Is it possible to use this as a simple es5/6 module and require/import for use in a particular class?

I get the impression that we need to run npm install && npm run build and then link to some generated js file directly in our html?

I'm feeling quite lost at how to get this working, so any help is greatly appreciated :)

lougreenwood avatar Sep 03 '18 17:09 lougreenwood

webcrypto-liner is a polyfill. It wraps existing global crypto object Window.

pv-webcrypto-tests

<script src="src/promise.js"></script> <!-- Adds Promise to IE -->
<script src="src/webcrypto-liner.min.js"></script>
<script src="src/asmcrypto.js"></script> <!-- RSA/AES implementation -->
<script src="src/elliptic.js"></script> <!-- EC implementation -->

You can use crypto without import/require

window.crypto.subtle.generateKey(alg, true, keyUsage);
// or
crypto.subtle.generateKey(alg, true, keyUsage);

microshine avatar Sep 03 '18 17:09 microshine

You can use crypto without import/require

Is there a path to use import/require if I want to? If not, can you help me to understand what the use case is for npm installing if the src files need copy/moving into some dir to reference directly from HTML?

Thanks for bearing with me on this :)

lougreenwood avatar Sep 03 '18 19:09 lougreenwood

webcrypto-liner is TS project. NPM version contains compiled JS files only. You don't need to install TypeScript and other dependencies for compiled files getting

microshine avatar Sep 03 '18 19:09 microshine

For example, I'm also using https://github.com/samthor/fast-text-encoding to polypill TextEncoder on ie11/Edge.

Usage of this is simple, I simply do a yarn add -D fast-text-encoder and then import 'fast-text-encoding'; in my JS and voila - the polyfill is enabled.

I'm trying to figure out if it's possible to have the same experience here...

lougreenwood avatar Sep 03 '18 19:09 lougreenwood

@microshine so you're saying all I need to do is yarn add webcrypto-liner and my code will be magically polyfilled? no imports necessary etc?

lougreenwood avatar Sep 03 '18 19:09 lougreenwood

Do you use any compiler for JS compilation? If yes. Do you have fast-text-encoding code in your bundled file after import 'fast-text-encoding' using?

microshine avatar Sep 03 '18 19:09 microshine

Yes, my project is built with EmberJS, which builds the app using Broccoli. commonjs modules are made available in my project using ember-auto-import https://github.com/ef4/ember-auto-import.

Yep, it's bundled and the fast-text-encoding polyfill is working in production...

lougreenwood avatar Sep 03 '18 20:09 lougreenwood

The problem is that package.json uses main: build/index.js, but npm module doesn't have build

Can you try to update webcrypto-liner/package.json and set main: dist/webcrypto-liner.shim.js? There can be problem with https://github.com/PeculiarVentures/webcrypto-liner/blob/master/src/init.ts#L5, you can comment it.

microshine avatar Sep 03 '18 20:09 microshine

@microshine that seems to have worked - at least my app is no longer throwing an exception when trying to import 'webcrypto-liner';

Let me check an environment where I was previously getting issues because crypto wasn't available...

lougreenwood avatar Sep 03 '18 20:09 lougreenwood

@lougreenwood I also expected to import the library in TypeScript like so: import 'webcrypto-liner';

Right now this won't work with the following error: Module not found: Error: Can't resolve 'crypto' in '(...)\node_modules\webcrypto-liner\build'

@microshine would it be possible for you to change main in package.json accordingly?

mc-suchecki avatar Jun 10 '19 09:06 mc-suchecki

@microshine @YuryStrozhevsky The issue pointed out by @mc-suchecki was a problem in my pull request to PKI.js. Please change the main field.

TJKoury avatar Jun 10 '19 11:06 TJKoury