-
BLS stands for
- Barreto-Lynn-Scott: BLS12, a Pairing Friendly Elliptic Curve.
- Boneh-Lynn-Shacham: A Signature Scheme.
-
Signature Aggregation
-
It is possible to verify
n
aggregate signatures on the same message with just2
pairings instead ofn+1
.
module.exports = function( grunt ) { | |
'use strict'; | |
// | |
// Grunt configuration: | |
// | |
// https://github.com/cowboy/grunt/blob/master/docs/getting_started.md | |
// | |
grunt.initConfig({ | |
// Project configuration |
{ | |
"Total": 910, | |
"my dms": 1, | |
"harbor is safe": 1, | |
"the Galaxy ": 1, | |
"Practice author": 1, | |
"Graph Representation Learning - rusty1s": 1, | |
"the PHP ecosystem": 1, | |
"software and to ensure that Python code is properly ported to Python 3": 1, | |
"Vienna - alanhamlett": 1, |
routes = require './routes' | |
# Execute handler on document ready event. | |
jQuery -> | |
# Initialise new Chaplin application. | |
# Specify controller suffix for clarity. | |
new Chaplin.Application | |
controllerSuffix: '-controller', pushState: false, routes: routes |
module.exports = function ( grunt ) { | |
/** | |
* Load required Grunt tasks. These are installed based on the versions listed | |
* in `package.json` when you do `npm install` in this directory. | |
*/ | |
grunt.loadNpmTasks('grunt-contrib-clean'); | |
grunt.loadNpmTasks('grunt-contrib-copy'); | |
grunt.loadNpmTasks('grunt-contrib-jshint'); | |
grunt.loadNpmTasks('grunt-contrib-concat'); |
Hal Finney's explanation of secp256k1 "efficiently computable endomorphism" parameters used secp256k1 libraries, archived from source.
The same optimization could be applied to any Koblitz curve (e.g. Short Weistrass curve with a=0).
I implemented an optimized ECDSA verify for the secp256k1 curve, based on pages 125-129 of the Guide to Elliptic Curve Cryptography, by Hankerson, Menezes and Vanstone. I own the book but I also found a PDF on a Russian site which is more convenient.
secp256k1 uses the following prime for its x and y coordinates:
Proving ownership of | |
- paulmillr.com/pgp_proof.txt via paulmillr.com/pgp_proof.txt.asc | |
- twitter.com/paulmillr | |
- github.com/paulmillr via gist.github.com/paulmillr/cb3ad3b9cd4ac849eb1def3634f93421 | |
- Active key: Paul Miller (PGP 697079DA6878B89B) from 3 Jul 2022 | |
- Revoked key: Paul Miller (PGP 46BEEF337A641ABB) was active from 15 Apr 2020 to 2 Jul 2022 | |
Full pubkey: |
const rotlHs = (h: string, l: string, s: number) => | |
s > 32 ? `(${l} << ${s - 32}) | (${h} >>> ${64 - s})` : `(${h} << ${s}) | (${l} >>> ${32 - s})`; | |
const rotlLs = (h: string, l: string, s: number) => | |
s > 32 ? `(${h} << ${s - 32}) | (${l} >>> ${64 - s})` : `(${l} << ${s}) | (${h} >>> ${32 - s})`; | |
export const keccakP = (() => { | |
let out = 'let h, l, s = state;\n'; | |
const vars = []; | |
for (let i = 0; i < 200 / 4; i++) vars.push(`s${i} = s[${i}]`); | |
out += `let ${vars.join(', ')};\n`; |
Fun parts of developing noble-hashes and scure-base
- Base58 is quadratic (O(n^2)). Basically you can’t encode 1MB of data with it. This has been found with our DoS tests, which we employ for scure-base and noble-hashes. See README for more details
- Hashes are additionally tested against huge multi-gig inputs, scrypt/pbkdf2 are tested against all possible combination of options. They take 2 hours to run on a decent machine
- Hashes are actually faster than many wasm alternatives. A single sha256 hashing of 32 bytes of data takes 888 nanoseconds on mac with M1
- The last fact is extremely remarkable, because we do not employ loop unrolls in the code. A loop unroll is when you’re writing code which could have been executed in loop like
for (let step = 0; step < 64)
, but instead, you’re writing every iteration step-by-step. Which incr
-
git version must be >= 2.34. Earlier versions don't support
gpg.format ssh
(signing commits with ssh keys).If you're printing signature keys in git log by using
%GK %GF %GP %GT
ingit.format.pretty
, earlier versions will crash when doinggit log
with following error:BUG: gpg-interface.c:284: bad signature
-
OpenSSH version must be >= 8.8. Earlier versions don't support
valid-after,valid-before
options.