a geicko-2 based round robin ranking system designed to test c++ battleship submissions
battleship.dunkirk.sh
1// Copyright (C) 2018 G.J.R. Timmer <gjr.timmer@gmail.com>.
2//
3// Use of this source code is governed by an MIT-style
4// license that can be found in the LICENSE file.
5
6package sqlite3
7
8import (
9 "crypto/sha1"
10 "crypto/sha256"
11 "crypto/sha512"
12)
13
14// This file provides several different implementations for the
15// default embedded sqlite_crypt function.
16// This function is uses a caesar-cypher by default
17// and is used within the UserAuthentication module to encode
18// the password.
19//
20// The provided functions can be used as an overload to the sqlite_crypt
21// function through the use of the RegisterFunc on the connection.
22//
23// Because the functions can serv a purpose to an end-user
24// without using the UserAuthentication module
25// the functions are default compiled in.
26//
27// From SQLITE3 - user-auth.txt
28// The sqlite_user.pw field is encoded by a built-in SQL function
29// "sqlite_crypt(X,Y)". The two arguments are both BLOBs. The first argument
30// is the plaintext password supplied to the sqlite3_user_authenticate()
31// interface. The second argument is the sqlite_user.pw value and is supplied
32// so that the function can extract the "salt" used by the password encoder.
33// The result of sqlite_crypt(X,Y) is another blob which is the value that
34// ends up being stored in sqlite_user.pw. To verify credentials X supplied
35// by the sqlite3_user_authenticate() routine, SQLite runs:
36//
37// sqlite_user.pw == sqlite_crypt(X, sqlite_user.pw)
38//
39// To compute an appropriate sqlite_user.pw value from a new or modified
40// password X, sqlite_crypt(X,NULL) is run. A new random salt is selected
41// when the second argument is NULL.
42//
43// The built-in version of of sqlite_crypt() uses a simple Caesar-cypher
44// which prevents passwords from being revealed by searching the raw database
45// for ASCII text, but is otherwise trivally broken. For better password
46// security, the database should be encrypted using the SQLite Encryption
47// Extension or similar technology. Or, the application can use the
48// sqlite3_create_function() interface to provide an alternative
49// implementation of sqlite_crypt() that computes a stronger password hash,
50// perhaps using a cryptographic hash function like SHA1.
51
52// CryptEncoderSHA1 encodes a password with SHA1
53func CryptEncoderSHA1(pass []byte, hash any) []byte {
54 h := sha1.Sum(pass)
55 return h[:]
56}
57
58// CryptEncoderSSHA1 encodes a password with SHA1 with the
59// configured salt.
60func CryptEncoderSSHA1(salt string) func(pass []byte, hash any) []byte {
61 return func(pass []byte, hash any) []byte {
62 s := []byte(salt)
63 p := append(pass, s...)
64 h := sha1.Sum(p)
65 return h[:]
66 }
67}
68
69// CryptEncoderSHA256 encodes a password with SHA256
70func CryptEncoderSHA256(pass []byte, hash any) []byte {
71 h := sha256.Sum256(pass)
72 return h[:]
73}
74
75// CryptEncoderSSHA256 encodes a password with SHA256
76// with the configured salt
77func CryptEncoderSSHA256(salt string) func(pass []byte, hash any) []byte {
78 return func(pass []byte, hash any) []byte {
79 s := []byte(salt)
80 p := append(pass, s...)
81 h := sha256.Sum256(p)
82 return h[:]
83 }
84}
85
86// CryptEncoderSHA384 encodes a password with SHA384
87func CryptEncoderSHA384(pass []byte, hash any) []byte {
88 h := sha512.Sum384(pass)
89 return h[:]
90}
91
92// CryptEncoderSSHA384 encodes a password with SHA384
93// with the configured salt
94func CryptEncoderSSHA384(salt string) func(pass []byte, hash any) []byte {
95 return func(pass []byte, hash any) []byte {
96 s := []byte(salt)
97 p := append(pass, s...)
98 h := sha512.Sum384(p)
99 return h[:]
100 }
101}
102
103// CryptEncoderSHA512 encodes a password with SHA512
104func CryptEncoderSHA512(pass []byte, hash any) []byte {
105 h := sha512.Sum512(pass)
106 return h[:]
107}
108
109// CryptEncoderSSHA512 encodes a password with SHA512
110// with the configured salt
111func CryptEncoderSSHA512(salt string) func(pass []byte, hash any) []byte {
112 return func(pass []byte, hash any) []byte {
113 s := []byte(salt)
114 p := append(pass, s...)
115 h := sha512.Sum512(p)
116 return h[:]
117 }
118}
119
120// EOF