Skip to content

Instantly share code, notes, and snippets.

Devin Canterberry canterberry

Block or report user

Report or block canterberry

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View ClassicUO-example-settings.json
"username": "",
"password": "",
"ip": "",
"port": 2593,
"ultimaonlinedirectory": "C:/Program Files (x86)/Electronic Arts/Ultima Online Renaissance",
"clientversion": "",
"lastcharactername": "",
"cliloc": "Cliloc.enu",
"lastservernum": 1,
canterberry / link-sdk.js
Created Apr 15, 2019
A minimal JavaScript SDK for interacting with Blockmason Link.
View link-sdk.js
canterberry / UO-Razor-DefaultProfile-RestockAgent-FullSpellbook.xml
Created Apr 9, 2019
Example Razor restock agent for creating a full spellbook.
View UO-Razor-DefaultProfile-RestockAgent-FullSpellbook.xml
<Restock-3 hotbag="0">
<item id="7981" amount="1" />
<item id="7982" amount="1" />
<item id="7983" amount="1" />
<item id="7984" amount="1" />
<item id="7985" amount="1" />
<item id="7986" amount="1" />
<item id="7987" amount="1" />
<item id="7988" amount="1" />
<item id="7989" amount="1" />
canterberry / UO-Razor-DefaultProfile-SpellbookOrganizers.xml
Created Apr 9, 2019
Copy/paste organizer agents for a UO Razor profile for stocking spellbooks.
View UO-Razor-DefaultProfile-SpellbookOrganizers.xml
<Organizer-10 hotbag="1099616085">
<item id="7981" />
<item id="7982" />
<item id="7983" />
<item id="7984" />
<item id="7985" />
<item id="7986" />
<item id="7987" />
<item id="7988" />
View dc26-badge-cryptanalysis.js
const { Buffer } = require('buffer');
const arcadePoster = Buffer.from('2BFC8E2B3561C04FBBC73FA43D5D96540D0AA008B30924CE47DA0EC67530D3', 'hex');
const arcadeGraffiti = Buffer.from('9E1CE2C2F6FBFE198637E6F10B957DDD50A7874177A51E', 'hex');
const humanoidNote = Buffer.from('FEEDB0B0DEADBEEF', 'hex');
const noteThenGraffiti = Buffer.from('FEEDB0B0DEADBEEF9E1CE2C2F6FBFE198637E6F10B957DDD50A7874177A51E', 'hex');
const graffitiThenNote = Buffer.from('9E1CE2C2F6FBFE198637E6F10B957DDD50A7874177A51EFEEDB0B0DEADBEEF', 'hex');
const merge = (A, B, f) => Buffer.from(Array.from(A).map((n, index) => f(n, B[index % B.length])));

Keybase proof

I hereby claim:

  • I am canterberry on github.
  • I am canterberry ( on keybase.
  • I have a public key whose fingerprint is 8BE0 8D64 2839 89A6 F2A3 8D02 7B35 80B9 FAA1 2E7E

To claim this, I am signing this object:

canterberry /
Created Apr 26, 2018
Export PEM-encoded EC key pair (ECDH, ECDSA)
// (Buffer is available in Node.js as a global, but we require it this way for compatibility)
// See:
const { Buffer } = require('buffer');
const crypto = require('crypto');
const keyPair = crypto.createECDH('secp256k1');
// Print the PEM-encoded private key
canterberry /
Created Feb 3, 2018
CLI for generating TLS key, certificate signing request (CSR), and self-signed certificate
#!/usr/bin/env bash
# ============================================================================ #
# This CLI tool is a working reference implementation for generating TLS
# private keys, certificate signing requests (CSRs), and self-signed
# certificates. The benefits of using this tool vs OpenSSL directly are as
# follows:
# * Significantly easier to use than OpenSSL.
# * Strong keys by default (ECC with secp384r1 curve).
canterberry / invertObject.js
Created Feb 22, 2016
Code Golf: Hash Inversion: JavaScript Solution (165 characters)
View invertObject.js
var i,x,y,f,k=[],v=[];for(i in h){k.push(i);v.push(h[i]);}h={};for(i in v){x=v[i];y=k[i];f=(a,b)=>{b=h[a];h[a]=(b?[y]):[b,y]:y)};;}

Keybase proof

I hereby claim:

  • I am canterberry on github.
  • I am twuni ( on keybase.
  • I have a public key whose fingerprint is FEE1 981E 7627 A2DB 6685 93DE A727 720A 403C FF61

To claim this, I am signing this object:

You can’t perform that action at this time.