Skip to content

telamon/powmem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

POP-0101: PoWMEM

Alternative Profile scheme for minimalists

Live demo: https://telamon.github.io/powmem/demo.html

We think the demo is kinda cool cause if you'd build it using traditional Web 2.0 tech you would not be able to provide a form and a realtime world-map with 0 server-costs.

Install

$ npm i powmem

API

Generate Identity roll(A, S, L)

Use this to provide an alternative to user registrations.

Requires peer dependency @noble/curves

Callsignature:

roll(
  age: number, // 0: 16+, 1: 24+, 2: 32+, 3: 48+
  sex: number: // 0: Female, 1: Male, 2: Non-binary, 3: Robot
  location: string, // A geohash
  geobits: number, // target precision, default: 15 (bits)
  maxTries: number, // Give up and return undefined, default: 50 000 attempts.
) Uint8Array? // returns mined Secret

Example:

import { roll } from 'powmem'

const secret = roll(2, 1, 'h4x')
console.log('Your secret key is', secret)

Imagine a nation where every citizen born takes a crayon and draws their own legal passport.

Decode Identity decodeASL(key)

Decodes the burnt in information:

Callsignature:

decodeASL(
  key: Uint8Array|hexstring
) ASL : {
  age: number, // 0..3
  sex: number, // 0..3
  location: string // 3-5 characters of geohash.
}

Example:

import { decodeASL, flagOf } from 'powmem'
import Geohash from 'latlon-geohash'

const key = '0149170fe78b061ce6c7295fff2daa303f710ba17efd8fafd8343292b4295e84'

const { age, sex, location } = decodeASL(key)

const humanYears = [16, 24, 32, 48][age]

console.log('Age:', humanYears)
console.log('Sex:', sex)
console.log('Country:', flagOf(location))
console.log('Coordinates:', Geohash.decode(location, 3))

Produces:

Produces:
Age: 24
Sex: 0
Country: 🇲🇫
Coordinates: { lat: -75.2, lon: 10.5 }

JSDOC output

Functions

roll(age, sex, location, [geobits], [maxTries])Uint8Array

Rolls keypairs until a matching public-key is found

decodeASL(publicKey, geobits)ASL

Holistically decodes ASL from a public key

unpackGeo(buf, nBits)string

Unpacks bitarray back into base32 string

packGeo(str, [nBits], destination)Uint8Array

Bitpacks a geohash string containing quintets to arbitrary bit-precision 'u120fw' <-- contains 30bits accurate to ~1.2 Kilometers References: Format specification: https://en.m.wikipedia.org/wiki/Geohash Bitdepthchart: https://www.ibm.com/docs/en/streams/4.3.0?topic=334-geohashes

shift(x, inp)number

Treats buffer as a series of latched 8bit shift-registers shifts all bits 1 step from low to high.

unshift(x, inp)number

Opposite of shift, shifts all bits 1 step towards low.

xorDistance(a, b)number

Calculates XOR-Distance between two buffers

flagOf(geohash, [bits])string

Returns nearest flag of geohash. The coordinates were given by GPT.

Typedefs

bit : 0 | 1
hexstring : string
ASL : Object

roll(age, sex, location, [geobits], [maxTries]) ⇒ Uint8Array

Rolls keypairs until a matching public-key is found

Kind: global function
Returns: Uint8Array - secret key if found within maxTries, null otherwise

Param Type Description
age 0 | 1 | 2 | 3 values: 0: 16+, 1: 24+; 2: 32+; 3: 40+
sex 0 | 1 | 2 | 3 values: 0: Female, 1: Male, 2: Nonbinary, 3: Bot
location string a geohash
[geobits] number geohash bit-size; default: 15
[maxTries] number maximum number of rolls before giving up.

decodeASL(publicKey, geobits) ⇒ ASL

Holistically decodes ASL from a public key

Kind: global function

Param Type Description
publicKey Uint8Array | hexstring
geobits number geohash bit-size; default: 15

unpackGeo(buf, nBits) ⇒ string

Unpacks bitarray back into base32 string

Kind: global function
Returns: string - A geohash

Param Type Description
buf Uint8Array | Buffer | array a byte array
nBits number number of bits to unpack

packGeo(str, [nBits], destination) ⇒ Uint8Array

Bitpacks a geohash string containing quintets to arbitrary bit-precision 'u120fw' <-- contains 30bits accurate to ~1.2 Kilometers References: Format specification: https://en.m.wikipedia.org/wiki/Geohash Bitdepthchart: https://www.ibm.com/docs/en/streams/4.3.0?topic=334-geohashes

        q1    q2    q3   18 19
HASH  01101 11111 11000 001|00 00010
LON   0 1 1  1 1  1 0 0  0 |0  0 0 0
LAT    1 0  1 1 1  1 0  0 1| 0  0 1

Kind: global function
Returns: Uint8Array - buffer containing binary geohash

Param Type Description
str string A geohash string.
[nBits] number precision in bits; default 12
destination Uint8Array | Buffer | Array buffer

shift(x, inp) ⇒ number

Treats buffer as a series of latched 8bit shift-registers shifts all bits 1 step from low to high.

Kind: global function
Returns: number - the previous last bit

Param Type Description
x bit The value to shift in
inp Uint8Array | Buffer | array The input buffer

unshift(x, inp) ⇒ number

Opposite of shift, shifts all bits 1 step towards low.

Kind: global function
Returns: number - the previous first bit

Param Type Description
x bit The value to shift out
inp Uint8Array | Buffer | array The input buffer

xorDistance(a, b) ⇒ number

Calculates XOR-Distance between two buffers

Kind: global function
Returns: number - Distance

Param Type Description
a Uint8Array | Buffer | Array Buffer A
b Uint8Array | Buffer | Array Buffer B

flagOf(geohash, [bits]) ⇒ string

Returns nearest flag of geohash. The coordinates were given by GPT.

Kind: global function
Returns: string - Emoji Flag

Param Type Description
geohash string A hashed location
[bits] number Geohash bit precision

bit : 0 | 1

Kind: global typedef

hexstring : string

Kind: global typedef

ASL : Object

Kind: global typedef

License

AGPLv3 - or mit or whatever, implement your own, it was kinda fun :-)

About

Alternative profile scheme for minimalists

Resources

License

Stars

Watchers

Forks

Packages

No packages published