No description
Find a file
2023-09-13 18:24:28 +07:00
.github Create FUNDING.yml 2019-07-24 21:50:38 +07:00
scram compatible fix for 1.6.14 2023-09-13 18:24:28 +07:00
tests - use sha1 and md5 from checksums 2023-09-13 13:05:22 +03:00
.gitignore Initial commit 2017-07-01 10:58:55 +07:00
.travis.yml add travis ci 2019-08-18 16:51:33 +07:00
LICENSE Initial commit 2017-07-01 10:58:55 +07:00
README.md Update README.md 2022-08-04 11:11:48 +07:00
scram.nimble compatible fix for 1.6.14 2023-09-13 18:24:28 +07:00

Build Status

scram.nim

Salted Challenge Response Authentication Mechanism (SCRAM)

Supported Mechanisms:

  • SCRAM-SHA-1
  • SCRAM-SHA-1-PLUS
  • SCRAM-SHA-256
  • SCRAM-SHA-256-PLUS
  • SCRAM-SHA-384
  • SCRAM-SHA-384-PLUS
  • SCRAM-SHA-512
  • SCRAM-SHA-512-PLUS
  • SCRAM-SHA3-512
  • SCRAM-SHA3-512-PLUS

Supported Channel Binding Types

  • TLS_UNIQUE
  • TLS_SERVER_END_POINT

Standards

Examples

Client

var client = newScramClient[Sha256Digest]()
assert client.prepareFirstMessage(user) == cfirst, "incorrect first message"
let fmsg = client.prepareFinalMessage(password, sfirst)
assert fmsg == cfinal, "incorrect final message"
assert client.verifyServerFinalMessage(sfinal), "incorrect server final message"

Channel Binding

Helper proc getChannelBindingData added to helps you getting channel binding data from existing Socket/AsyncSocket

var
  ctx = newContext()
  socket = newSocket()
ctx.wrapSocket(socket)
socket.connect(...)
# ....
let cbData = getChannelBindingData(TLS_UNIQUE, socket)

var client = newScramClient[Sha256Digest]()
client.setChannelBindingType(TLS_UNIQUE)
client.setChannelBindingData(cbData)
echo client.prepareFirstMessage(user)