# trusted-platform-module-2

> Node JS library for working with the TPM2.

Latest version **1.0.0** (published 2023-01-06) · ISC license · 0 weekly downloads

## Install

```sh
npm install trusted-platform-module-2
pnpm add trusted-platform-module-2
yarn add trusted-platform-module-2
bun add trusted-platform-module-2
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2023-01-06 |
| First published | 2023-01-06 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 728.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Maintainers | anthonycbudd |

## Links

- npm: https://www.npmjs.com/package/trusted-platform-module-2
- Repository: https://github.com/anthonybudd/TPM2
- Homepage: https://github.com/anthonybudd/TPM2#readme
- Issues: https://github.com/anthonybudd/TPM2/issues
- npm.io page: https://npm.io/package/trusted-platform-module-2

## Recent versions

- 1.0.0 (latest) — 2023-01-06

## README

# TPM2-Node

<p align="center">
    <img src="https://github.com/anthonybudd/TPM2/raw/main/docs/images/tpm-icon.png" width="100" alt="tpm icon">
</p>

<p align="center">
    <img src="https://github.com/anthonybudd/TPM2/raw/main/docs/images/geek-pi-tmp2.png" width="300" alt="geekpi tpm">
</p>

Node JS library for working with the TPM (Trusted Platform Module) 2.0

The TPM classs is a JS API of the tpm2-tools found here [tpm2-tools.readthedocs.io](https://tpm2-tools.readthedocs.io/en/latest/)


```
npm i trusted-platform-module-2
```

```js
const TPM2 = require('trusted-platform-module-2');
const tpm2 = new TPM2;

// Random bytes
console.log(tpm2.getRandom(8));

// Encrypt/decrypt file.
tpm2.encrypt('path/to/.env', {
    parentContext: 'key.ctx',
    output: 'secrets.enc'
});
tpm2.decrypt('secrets.enc', {
    parentContext: 'key.ctx',
    output: 'decrypted-secrets.txt'
});
```


### Example
Below is a full example on how to use the TPM library to: create a primary hierarchy, create a child object, load the public/private portions of the key into the TPM, then encrypt a file with that key. 

```js
tpm2.createPrimary({
    keyContext: 'primary.ctx'
});
tpm2.create({
    parentContext: 'primary.ctx',
    keyAlgorithm: 'aes128',
    public: 'key.pub',
    private: 'key.priv',
});
tpm2.load({
    parentContext: 'primary.ctx',
    keyContext: 'key.ctx',
    public: 'key.pub',
    private: 'key.priv',
});
tpm2.encrypt('path/to/.env', {
    parentContext: 'key.ctx',
    output: 'secrets.enc'
});
```


### Raspberry Pi Set-up
I tested this library using the GeekPi TPM2 module which has a Infineon Optiga SLB 9670.


```sh
sudo echo 'dtparam=spi=on' >> /boot/config.txt
sudo echo 'dtoverlay=tpm-slb9670' >> /boot/config.txt

apt-get install tpm2-tools
# or build from source. Recommended but more complex. https://github.com/tpm2-software

git clone git@github.com:anthonybudd/TPM2.git
cd TPM2
npm i
npm run test
```

---
_Source: https://npm.io/package/trusted-platform-module-2 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
