mirror of
https://github.com/openfaas/faas.git
synced 2025-06-21 14:23:25 +00:00
Update/delete vendor files
Refreshed / updated vendor dependencies Tested with "make". Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
This commit is contained in:
committed by
Alex Ellis
parent
f62bcb0736
commit
d6cf72bb39
15
gateway/vendor/github.com/nats-io/nkeys/.gitignore
generated
vendored
Normal file
15
gateway/vendor/github.com/nats-io/nkeys/.gitignore
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
build/
|
||||
|
||||
# Test binary, build with `go test -c`
|
||||
*.test
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
||||
# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
|
||||
.glide/
|
38
gateway/vendor/github.com/nats-io/nkeys/.goreleaser.yml
generated
vendored
Normal file
38
gateway/vendor/github.com/nats-io/nkeys/.goreleaser.yml
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
project_name: nkeys
|
||||
release:
|
||||
github:
|
||||
owner: nats-io
|
||||
name: nkeys
|
||||
name_template: '{{.Tag}}'
|
||||
draft: true
|
||||
builds:
|
||||
- main: ./nk/main.go
|
||||
ldflags: "-X main.Version={{.Tag}}_{{.Commit}}"
|
||||
binary: nk
|
||||
goos:
|
||||
- linux
|
||||
- darwin
|
||||
goarch:
|
||||
- amd64
|
||||
|
||||
|
||||
dist: build
|
||||
|
||||
archive:
|
||||
wrap_in_directory: true
|
||||
name_template: '{{ .ProjectName }}-v{{ .Version }}-{{ .Os }}-{{ .Arch }}{{ if .Arm
|
||||
}}v{{ .Arm }}{{ end }}'
|
||||
format: zip
|
||||
|
||||
checksum:
|
||||
name_template: '{{ .ProjectName }}-v{{ .Version }}-checksums.txt'
|
||||
|
||||
snapshot:
|
||||
name_template: 'dev'
|
||||
|
||||
nfpm:
|
||||
formats:
|
||||
- deb
|
||||
bindir: /usr/local/bin
|
||||
description: NKeys utility cli program
|
||||
vendor: nats-io
|
31
gateway/vendor/github.com/nats-io/nkeys/.travis.yml
generated
vendored
Normal file
31
gateway/vendor/github.com/nats-io/nkeys/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
language: go
|
||||
sudo: false
|
||||
go:
|
||||
- 1.12.x
|
||||
- 1.11.x
|
||||
|
||||
install:
|
||||
- go get -t ./...
|
||||
- go get github.com/mattn/goveralls
|
||||
- go get -u honnef.co/go/tools/cmd/staticcheck
|
||||
- go get -u github.com/client9/misspell/cmd/misspell
|
||||
|
||||
before_script:
|
||||
- $(exit $(go fmt ./... | wc -l))
|
||||
- go vet ./...
|
||||
- misspell -error -locale US .
|
||||
- staticcheck ./...
|
||||
|
||||
script:
|
||||
- go test -v
|
||||
- go test -v --race
|
||||
- go test -v -covermode=count -coverprofile=coverage.out
|
||||
- $HOME/gopath/bin/goveralls -coverprofile coverage.out -service travis-ci
|
||||
|
||||
#deploy:
|
||||
#- provider: script
|
||||
# skip_cleanup: true
|
||||
# script: curl -sL http://git.io/goreleaser | bash
|
||||
# on:
|
||||
# tags: true
|
||||
# condition: $TRAVIS_OS_NAME = linux
|
3
gateway/vendor/github.com/nats-io/nkeys/GOVERNANCE.md
generated
vendored
Normal file
3
gateway/vendor/github.com/nats-io/nkeys/GOVERNANCE.md
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# NATS NKEYS Governance
|
||||
|
||||
NATS NKEYS is part of the NATS project and is subject to the [NATS Governance](https://github.com/nats-io/nats-general/blob/master/GOVERNANCE.md).
|
201
gateway/vendor/github.com/nats-io/nkeys/LICENSE
generated
vendored
Normal file
201
gateway/vendor/github.com/nats-io/nkeys/LICENSE
generated
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
6
gateway/vendor/github.com/nats-io/nkeys/MAINTAINERS.md
generated
vendored
Normal file
6
gateway/vendor/github.com/nats-io/nkeys/MAINTAINERS.md
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
# Maintainers
|
||||
|
||||
Maintainership is on a per project basis.
|
||||
|
||||
### Core-maintainers
|
||||
- Derek Collison <derek@nats.io> [@derekcollison](https://github.com/derekcollison)
|
72
gateway/vendor/github.com/nats-io/nkeys/README.md
generated
vendored
Normal file
72
gateway/vendor/github.com/nats-io/nkeys/README.md
generated
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
# NKEYS
|
||||
|
||||
[](https://www.apache.org/licenses/LICENSE-2.0)
|
||||
[](http://goreportcard.com/report/nats-io/nkeys)
|
||||
[](http://travis-ci.org/nats-io/nkeys)
|
||||
[](http://godoc.org/github.com/nats-io/nkeys)
|
||||
[](https://coveralls.io/github/nats-io/nkeys?branch=master)
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fnats-io%2Fnkeys?ref=badge_shield)
|
||||
|
||||
A public-key signature system based on [Ed25519](https://ed25519.cr.yp.to/) for the NATS ecosystem.
|
||||
|
||||
## About
|
||||
|
||||
The NATS ecosystem will be moving to [Ed25519](https://ed25519.cr.yp.to/) keys for identity, authentication and authorization for entities such as Accounts, Users, Servers and Clusters.
|
||||
|
||||
Ed25519 is fast and resistant to side channel attacks. Generation of a seed key is all that is needed to be stored and kept safe, as the seed can generate both the public and private keys.
|
||||
|
||||
The NATS system will utilize Ed25519 keys, meaning that NATS systems will never store or even have access to any private keys. Authentication will utilize a random challenge response mechanism.
|
||||
|
||||
Dealing with 32 byte and 64 byte raw keys can be challenging. NKEYS is designed to formulate keys in a much friendlier fashion and references work done in cryptocurrencies, specifically [Stellar](https://www.stellar.org/). Bitcoin and others used a form of Base58 (or Base58Check) to endode raw keys. Stellar utilized a more traditonal Base32 with a CRC16 and a version or prefix byte. NKEYS utilizes a similar format where the prefix will be 1 byte for public and private keys and will be 2 bytes for seeds. The base32 encoding of these prefixes will yield friendly human readbable prefixes, e.g. '**N**' = server, '**C**' = cluster, '**O**' = operator, '**A**' = account, and '**U**' = user. '**P**' is used for private keys. For seeds, the first encoded prefix is '**S**', and the second character will be the type for the public key, e.g. "**SU**" is a seed for a user key pair, "**SA**" is a seed for an account key pair.
|
||||
|
||||
## Installation
|
||||
|
||||
Use the `go` command:
|
||||
|
||||
$ go get github.com/nats-io/nkeys
|
||||
|
||||
## nk - Command Line Utility
|
||||
|
||||
Located under the nk [directory](https://github.com/nats-io/nkeys/tree/master/nk).
|
||||
|
||||
## Basic API Usage
|
||||
```go
|
||||
|
||||
// Create a new User KeyPair
|
||||
user, _ := nkeys.CreateUser()
|
||||
|
||||
// Sign some data with a full key pair user.
|
||||
data := []byte("Hello World")
|
||||
sig, _ := user.Sign(data)
|
||||
|
||||
// Verify the signature.
|
||||
err = user.Verify(data, sig)
|
||||
|
||||
// Access the seed, the only thing that needs to be stored and kept safe.
|
||||
// seed = "SUAKYRHVIOREXV7EUZTBHUHL7NUMHPMAS7QMDU3GTIUWEI5LDNOXD43IZY"
|
||||
seed, _ := user.Seed()
|
||||
|
||||
// Access the public key which can be shared.
|
||||
// publicKey = "UD466L6EBCM3YY5HEGHJANNTN4LSKTSUXTH7RILHCKEQMQHTBNLHJJXT"
|
||||
publicKey, _ := user.PublicKey()
|
||||
|
||||
// Create a full User who can sign and verify from a private seed.
|
||||
user, _ = nkeys.FromSeed(seed)
|
||||
|
||||
// Create a User who can only verify signatures via a public key.
|
||||
user, _ = nkeys.FromPublicKey(publicKey)
|
||||
|
||||
// Create a User KeyPair with our own random data.
|
||||
var rawSeed [32]byte
|
||||
_, err := io.ReadFull(rand.Reader, rawSeed[:]) // Or some other random source.
|
||||
user2, _ := nkeys.FromRawSeed(PrefixByteUser, rawSeed)
|
||||
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
Unless otherwise noted, the NATS source files are distributed
|
||||
under the Apache Version 2.0 license found in the LICENSE file.
|
||||
|
||||
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fnats-io%2Fnkeys?ref=badge_large)
|
5
gateway/vendor/github.com/nats-io/nkeys/TODO.md
generated
vendored
Normal file
5
gateway/vendor/github.com/nats-io/nkeys/TODO.md
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
# General
|
||||
|
||||
- [ ] Child key derivation
|
||||
- [ ] Hardware support, e.g. YubiHSM
|
75
gateway/vendor/github.com/nats-io/nkeys/crc16.go
generated
vendored
Normal file
75
gateway/vendor/github.com/nats-io/nkeys/crc16.go
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
// Copyright 2018 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package nkeys
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
// An implementation of crc16 according to CCITT standards for XMODEM.
|
||||
|
||||
// ErrInvalidChecksum indicates a failed verification.
|
||||
var ErrInvalidChecksum = errors.New("nkeys: invalid checksum")
|
||||
|
||||
var crc16tab = [256]uint16{
|
||||
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
|
||||
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
|
||||
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
|
||||
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
|
||||
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
|
||||
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
|
||||
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
|
||||
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
|
||||
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
|
||||
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
|
||||
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
|
||||
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
|
||||
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
|
||||
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
|
||||
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
|
||||
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
|
||||
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
|
||||
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
|
||||
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
|
||||
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
|
||||
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
|
||||
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
|
||||
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
|
||||
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
|
||||
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
|
||||
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
|
||||
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
|
||||
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
|
||||
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
|
||||
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
|
||||
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
|
||||
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
|
||||
}
|
||||
|
||||
// crc16 returns the 2-byte crc for the data provided.
|
||||
func crc16(data []byte) uint16 {
|
||||
var crc uint16
|
||||
for _, b := range data {
|
||||
crc = ((crc << 8) & 0xffff) ^ crc16tab[((crc>>8)^uint16(b))&0x00FF]
|
||||
}
|
||||
return crc
|
||||
}
|
||||
|
||||
// validate will check the calculated crc16 checksum for data against the expected.
|
||||
func validate(data []byte, expected uint16) error {
|
||||
if crc16(data) != expected {
|
||||
return ErrInvalidChecksum
|
||||
}
|
||||
return nil
|
||||
}
|
3
gateway/vendor/github.com/nats-io/nkeys/go.mod
generated
vendored
Normal file
3
gateway/vendor/github.com/nats-io/nkeys/go.mod
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
module github.com/nats-io/nkeys
|
||||
|
||||
require golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
|
7
gateway/vendor/github.com/nats-io/nkeys/go.sum
generated
vendored
Normal file
7
gateway/vendor/github.com/nats-io/nkeys/go.sum
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
117
gateway/vendor/github.com/nats-io/nkeys/keypair.go
generated
vendored
Normal file
117
gateway/vendor/github.com/nats-io/nkeys/keypair.go
generated
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
// Copyright 2018 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package nkeys
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"io"
|
||||
|
||||
"golang.org/x/crypto/ed25519"
|
||||
)
|
||||
|
||||
// kp is the internal struct for a kepypair using seed.
|
||||
type kp struct {
|
||||
seed []byte
|
||||
}
|
||||
|
||||
// CreatePair will create a KeyPair based on the rand entropy and a type/prefix byte. rand can be nil.
|
||||
func CreatePair(prefix PrefixByte) (KeyPair, error) {
|
||||
var rawSeed [32]byte
|
||||
|
||||
_, err := io.ReadFull(rand.Reader, rawSeed[:])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
seed, err := EncodeSeed(prefix, rawSeed[:])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &kp{seed}, nil
|
||||
}
|
||||
|
||||
// rawSeed will return the raw, decoded 64 byte seed.
|
||||
func (pair *kp) rawSeed() ([]byte, error) {
|
||||
_, raw, err := DecodeSeed(pair.seed)
|
||||
return raw, err
|
||||
}
|
||||
|
||||
// keys will return a 32 byte public key and a 64 byte private key utilizing the seed.
|
||||
func (pair *kp) keys() (ed25519.PublicKey, ed25519.PrivateKey, error) {
|
||||
raw, err := pair.rawSeed()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return ed25519.GenerateKey(bytes.NewReader(raw))
|
||||
}
|
||||
|
||||
// Wipe will randomize the contents of the seed key
|
||||
func (pair *kp) Wipe() {
|
||||
io.ReadFull(rand.Reader, pair.seed)
|
||||
pair.seed = nil
|
||||
}
|
||||
|
||||
// Seed will return the encoded seed.
|
||||
func (pair *kp) Seed() ([]byte, error) {
|
||||
return pair.seed, nil
|
||||
}
|
||||
|
||||
// PublicKey will return the encoded public key associated with the KeyPair.
|
||||
// All KeyPairs have a public key.
|
||||
func (pair *kp) PublicKey() (string, error) {
|
||||
public, raw, err := DecodeSeed(pair.seed)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
pub, _, err := ed25519.GenerateKey(bytes.NewReader(raw))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
pk, err := Encode(public, pub)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(pk), nil
|
||||
}
|
||||
|
||||
// PrivateKey will return the encoded private key for KeyPair.
|
||||
func (pair *kp) PrivateKey() ([]byte, error) {
|
||||
_, priv, err := pair.keys()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return Encode(PrefixBytePrivate, priv)
|
||||
}
|
||||
|
||||
// Sign will sign the input with KeyPair's private key.
|
||||
func (pair *kp) Sign(input []byte) ([]byte, error) {
|
||||
_, priv, err := pair.keys()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ed25519.Sign(priv, input), nil
|
||||
}
|
||||
|
||||
// Verify will verify the input against a signature utilizing the public key.
|
||||
func (pair *kp) Verify(input []byte, sig []byte) error {
|
||||
pub, _, err := pair.keys()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !ed25519.Verify(pub, input, sig) {
|
||||
return ErrInvalidSignature
|
||||
}
|
||||
return nil
|
||||
}
|
103
gateway/vendor/github.com/nats-io/nkeys/main.go
generated
vendored
Normal file
103
gateway/vendor/github.com/nats-io/nkeys/main.go
generated
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
// Copyright 2018-2019 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package nkeys is an Ed25519 based public-key signature system that simplifies keys and seeds
|
||||
// and performs signing and verification.
|
||||
package nkeys
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
// Version
|
||||
const Version = "0.1.0"
|
||||
|
||||
// Errors
|
||||
var (
|
||||
ErrInvalidPrefixByte = errors.New("nkeys: invalid prefix byte")
|
||||
ErrInvalidKey = errors.New("nkeys: invalid key")
|
||||
ErrInvalidPublicKey = errors.New("nkeys: invalid public key")
|
||||
ErrInvalidSeedLen = errors.New("nkeys: invalid seed length")
|
||||
ErrInvalidSeed = errors.New("nkeys: invalid seed")
|
||||
ErrInvalidEncoding = errors.New("nkeys: invalid encoded key")
|
||||
ErrInvalidSignature = errors.New("nkeys: signature verification failed")
|
||||
ErrCannotSign = errors.New("nkeys: can not sign, no private key available")
|
||||
ErrPublicKeyOnly = errors.New("nkeys: no seed or private key available")
|
||||
)
|
||||
|
||||
// KeyPair provides the central interface to nkeys.
|
||||
type KeyPair interface {
|
||||
Seed() ([]byte, error)
|
||||
PublicKey() (string, error)
|
||||
PrivateKey() ([]byte, error)
|
||||
Sign(input []byte) ([]byte, error)
|
||||
Verify(input []byte, sig []byte) error
|
||||
Wipe()
|
||||
}
|
||||
|
||||
// CreateUser will create a User typed KeyPair.
|
||||
func CreateUser() (KeyPair, error) {
|
||||
return CreatePair(PrefixByteUser)
|
||||
}
|
||||
|
||||
// CreateAccount will create an Account typed KeyPair.
|
||||
func CreateAccount() (KeyPair, error) {
|
||||
return CreatePair(PrefixByteAccount)
|
||||
}
|
||||
|
||||
// CreateServer will create a Server typed KeyPair.
|
||||
func CreateServer() (KeyPair, error) {
|
||||
return CreatePair(PrefixByteServer)
|
||||
}
|
||||
|
||||
// CreateCluster will create a Cluster typed KeyPair.
|
||||
func CreateCluster() (KeyPair, error) {
|
||||
return CreatePair(PrefixByteCluster)
|
||||
}
|
||||
|
||||
// CreateOperator will create an Operator typed KeyPair.
|
||||
func CreateOperator() (KeyPair, error) {
|
||||
return CreatePair(PrefixByteOperator)
|
||||
}
|
||||
|
||||
// FromPublicKey will create a KeyPair capable of verifying signatures.
|
||||
func FromPublicKey(public string) (KeyPair, error) {
|
||||
raw, err := decode([]byte(public))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pre := PrefixByte(raw[0])
|
||||
if err := checkValidPublicPrefixByte(pre); err != nil {
|
||||
return nil, ErrInvalidPublicKey
|
||||
}
|
||||
return &pub{pre, raw[1:]}, nil
|
||||
}
|
||||
|
||||
// FromSeed will create a KeyPair capable of signing and verifying signatures.
|
||||
func FromSeed(seed []byte) (KeyPair, error) {
|
||||
_, _, err := DecodeSeed(seed)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
copy := append([]byte{}, seed...)
|
||||
return &kp{copy}, nil
|
||||
}
|
||||
|
||||
// Create a KeyPair from the raw 32 byte seed for a given type.
|
||||
func FromRawSeed(prefix PrefixByte, rawSeed []byte) (KeyPair, error) {
|
||||
seed, err := EncodeSeed(prefix, rawSeed)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &kp{seed}, nil
|
||||
}
|
66
gateway/vendor/github.com/nats-io/nkeys/public.go
generated
vendored
Normal file
66
gateway/vendor/github.com/nats-io/nkeys/public.go
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
// Copyright 2018 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package nkeys
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"io"
|
||||
|
||||
"golang.org/x/crypto/ed25519"
|
||||
)
|
||||
|
||||
// A KeyPair from a public key capable of verifying only.
|
||||
type pub struct {
|
||||
pre PrefixByte
|
||||
pub ed25519.PublicKey
|
||||
}
|
||||
|
||||
// PublicKey will return the encoded public key associated with the KeyPair.
|
||||
// All KeyPairs have a public key.
|
||||
func (p *pub) PublicKey() (string, error) {
|
||||
pk, err := Encode(p.pre, p.pub)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(pk), nil
|
||||
}
|
||||
|
||||
// Seed will return an error since this is not available for public key only KeyPairs.
|
||||
func (p *pub) Seed() ([]byte, error) {
|
||||
return nil, ErrPublicKeyOnly
|
||||
}
|
||||
|
||||
// PrivateKey will return an error since this is not available for public key only KeyPairs.
|
||||
func (p *pub) PrivateKey() ([]byte, error) {
|
||||
return nil, ErrPublicKeyOnly
|
||||
}
|
||||
|
||||
// Sign will return an error since this is not available for public key only KeyPairs.
|
||||
func (p *pub) Sign(input []byte) ([]byte, error) {
|
||||
return nil, ErrCannotSign
|
||||
}
|
||||
|
||||
// Verify will verify the input against a signature utilizing the public key.
|
||||
func (p *pub) Verify(input []byte, sig []byte) error {
|
||||
if !ed25519.Verify(p.pub, input, sig) {
|
||||
return ErrInvalidSignature
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Wipe will randomize the public key and erase the pre byte.
|
||||
func (p *pub) Wipe() {
|
||||
p.pre = '0'
|
||||
io.ReadFull(rand.Reader, p.pub)
|
||||
}
|
290
gateway/vendor/github.com/nats-io/nkeys/strkey.go
generated
vendored
Normal file
290
gateway/vendor/github.com/nats-io/nkeys/strkey.go
generated
vendored
Normal file
@ -0,0 +1,290 @@
|
||||
// Copyright 2018 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package nkeys
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base32"
|
||||
"encoding/binary"
|
||||
|
||||
"golang.org/x/crypto/ed25519"
|
||||
)
|
||||
|
||||
// PrefixByte is a lead byte representing the type.
|
||||
type PrefixByte byte
|
||||
|
||||
const (
|
||||
// PrefixByteSeed is the version byte used for encoded NATS Seeds
|
||||
PrefixByteSeed PrefixByte = 18 << 3 // Base32-encodes to 'S...'
|
||||
|
||||
// PrefixBytePrivate is the version byte used for encoded NATS Private keys
|
||||
PrefixBytePrivate PrefixByte = 15 << 3 // Base32-encodes to 'P...'
|
||||
|
||||
// PrefixByteServer is the version byte used for encoded NATS Servers
|
||||
PrefixByteServer PrefixByte = 13 << 3 // Base32-encodes to 'N...'
|
||||
|
||||
// PrefixByteCluster is the version byte used for encoded NATS Clusters
|
||||
PrefixByteCluster PrefixByte = 2 << 3 // Base32-encodes to 'C...'
|
||||
|
||||
// PrefixByteOperator is the version byte used for encoded NATS Operators
|
||||
PrefixByteOperator PrefixByte = 14 << 3 // Base32-encodes to 'O...'
|
||||
|
||||
// PrefixByteAccount is the version byte used for encoded NATS Accounts
|
||||
PrefixByteAccount PrefixByte = 0 // Base32-encodes to 'A...'
|
||||
|
||||
// PrefixByteUser is the version byte used for encoded NATS Users
|
||||
PrefixByteUser PrefixByte = 20 << 3 // Base32-encodes to 'U...'
|
||||
|
||||
// PrefixByteUnknown is for unknown prefixes.
|
||||
PrefixByteUknown PrefixByte = 23 << 3 // Base32-encodes to 'X...'
|
||||
)
|
||||
|
||||
// Set our encoding to not include padding '=='
|
||||
var b32Enc = base32.StdEncoding.WithPadding(base32.NoPadding)
|
||||
|
||||
// Encode will encode a raw key or seed with the prefix and crc16 and then base32 encoded.
|
||||
func Encode(prefix PrefixByte, src []byte) ([]byte, error) {
|
||||
if err := checkValidPrefixByte(prefix); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var raw bytes.Buffer
|
||||
|
||||
// write prefix byte
|
||||
if err := raw.WriteByte(byte(prefix)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// write payload
|
||||
if _, err := raw.Write(src); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Calculate and write crc16 checksum
|
||||
err := binary.Write(&raw, binary.LittleEndian, crc16(raw.Bytes()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data := raw.Bytes()
|
||||
buf := make([]byte, b32Enc.EncodedLen(len(data)))
|
||||
b32Enc.Encode(buf, data)
|
||||
return buf[:], nil
|
||||
}
|
||||
|
||||
// EncodeSeed will encode a raw key with the prefix and then seed prefix and crc16 and then base32 encoded.
|
||||
func EncodeSeed(public PrefixByte, src []byte) ([]byte, error) {
|
||||
if err := checkValidPublicPrefixByte(public); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(src) != ed25519.SeedSize {
|
||||
return nil, ErrInvalidSeedLen
|
||||
}
|
||||
|
||||
// In order to make this human printable for both bytes, we need to do a little
|
||||
// bit manipulation to setup for base32 encoding which takes 5 bits at a time.
|
||||
b1 := byte(PrefixByteSeed) | (byte(public) >> 5)
|
||||
b2 := (byte(public) & 31) << 3 // 31 = 00011111
|
||||
|
||||
var raw bytes.Buffer
|
||||
|
||||
raw.WriteByte(b1)
|
||||
raw.WriteByte(b2)
|
||||
|
||||
// write payload
|
||||
if _, err := raw.Write(src); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Calculate and write crc16 checksum
|
||||
err := binary.Write(&raw, binary.LittleEndian, crc16(raw.Bytes()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data := raw.Bytes()
|
||||
buf := make([]byte, b32Enc.EncodedLen(len(data)))
|
||||
b32Enc.Encode(buf, data)
|
||||
return buf, nil
|
||||
}
|
||||
|
||||
// IsValidEncoding will tell you if the encoding is a valid key.
|
||||
func IsValidEncoding(src []byte) bool {
|
||||
_, err := decode(src)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// decode will decode the base32 and check crc16 and the prefix for validity.
|
||||
func decode(src []byte) ([]byte, error) {
|
||||
raw := make([]byte, b32Enc.DecodedLen(len(src)))
|
||||
n, err := b32Enc.Decode(raw, src)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
raw = raw[:n]
|
||||
|
||||
if len(raw) < 4 {
|
||||
return nil, ErrInvalidEncoding
|
||||
}
|
||||
|
||||
var crc uint16
|
||||
checksum := bytes.NewReader(raw[len(raw)-2:])
|
||||
if err := binary.Read(checksum, binary.LittleEndian, &crc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// ensure checksum is valid
|
||||
if err := validate(raw[0:len(raw)-2], crc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return raw[:len(raw)-2], nil
|
||||
}
|
||||
|
||||
// Decode will decode the base32 string and check crc16 and enforce the prefix is what is expected.
|
||||
func Decode(expectedPrefix PrefixByte, src []byte) ([]byte, error) {
|
||||
if err := checkValidPrefixByte(expectedPrefix); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
raw, err := decode(src)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if prefix := PrefixByte(raw[0]); prefix != expectedPrefix {
|
||||
return nil, ErrInvalidPrefixByte
|
||||
}
|
||||
return raw[1:], nil
|
||||
}
|
||||
|
||||
// DecodeSeed will decode the base32 string and check crc16 and enforce the prefix is a seed
|
||||
// and the subsequent type is a valid type.
|
||||
func DecodeSeed(src []byte) (PrefixByte, []byte, error) {
|
||||
raw, err := decode(src)
|
||||
if err != nil {
|
||||
return PrefixByteSeed, nil, err
|
||||
}
|
||||
// Need to do the reverse here to get back to internal representation.
|
||||
b1 := raw[0] & 248 // 248 = 11111000
|
||||
b2 := (raw[0]&7)<<5 | ((raw[1] & 248) >> 3) // 7 = 00000111
|
||||
|
||||
if PrefixByte(b1) != PrefixByteSeed {
|
||||
return PrefixByteSeed, nil, ErrInvalidSeed
|
||||
}
|
||||
if checkValidPublicPrefixByte(PrefixByte(b2)) != nil {
|
||||
return PrefixByteSeed, nil, ErrInvalidSeed
|
||||
}
|
||||
return PrefixByte(b2), raw[2:], nil
|
||||
}
|
||||
|
||||
func Prefix(src string) PrefixByte {
|
||||
b, err := decode([]byte(src))
|
||||
if err != nil {
|
||||
return PrefixByteUknown
|
||||
}
|
||||
prefix := PrefixByte(b[0])
|
||||
err = checkValidPrefixByte(prefix)
|
||||
if err == nil {
|
||||
return prefix
|
||||
}
|
||||
// Might be a seed.
|
||||
b1 := b[0] & 248
|
||||
if PrefixByte(b1) == PrefixByteSeed {
|
||||
return PrefixByteSeed
|
||||
}
|
||||
return PrefixByteUknown
|
||||
}
|
||||
|
||||
// IsValidPublicKey will decode and verify that the string is a valid encoded public key.
|
||||
func IsValidPublicKey(src string) bool {
|
||||
b, err := decode([]byte(src))
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
if prefix := PrefixByte(b[0]); checkValidPublicPrefixByte(prefix) != nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// IsValidPublicUserKey will decode and verify the string is a valid encoded Public User Key.
|
||||
func IsValidPublicUserKey(src string) bool {
|
||||
_, err := Decode(PrefixByteUser, []byte(src))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// IsValidPublicAccountKey will decode and verify the string is a valid encoded Public Account Key.
|
||||
func IsValidPublicAccountKey(src string) bool {
|
||||
_, err := Decode(PrefixByteAccount, []byte(src))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// IsValidPublicServerKey will decode and verify the string is a valid encoded Public Server Key.
|
||||
func IsValidPublicServerKey(src string) bool {
|
||||
_, err := Decode(PrefixByteServer, []byte(src))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// IsValidPublicClusterKey will decode and verify the string is a valid encoded Public Cluster Key.
|
||||
func IsValidPublicClusterKey(src string) bool {
|
||||
_, err := Decode(PrefixByteCluster, []byte(src))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// IsValidPublicOperatorKey will decode and verify the string is a valid encoded Public Operator Key.
|
||||
func IsValidPublicOperatorKey(src string) bool {
|
||||
_, err := Decode(PrefixByteOperator, []byte(src))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// checkValidPrefixByte returns an error if the provided value
|
||||
// is not one of the defined valid prefix byte constants.
|
||||
func checkValidPrefixByte(prefix PrefixByte) error {
|
||||
switch prefix {
|
||||
case PrefixByteOperator, PrefixByteServer, PrefixByteCluster,
|
||||
PrefixByteAccount, PrefixByteUser, PrefixByteSeed, PrefixBytePrivate:
|
||||
return nil
|
||||
}
|
||||
return ErrInvalidPrefixByte
|
||||
}
|
||||
|
||||
// checkValidPublicPrefixByte returns an error if the provided value
|
||||
// is not one of the public defined valid prefix byte constants.
|
||||
func checkValidPublicPrefixByte(prefix PrefixByte) error {
|
||||
switch prefix {
|
||||
case PrefixByteServer, PrefixByteCluster, PrefixByteOperator, PrefixByteAccount, PrefixByteUser:
|
||||
return nil
|
||||
}
|
||||
return ErrInvalidPrefixByte
|
||||
}
|
||||
|
||||
func (p PrefixByte) String() string {
|
||||
switch p {
|
||||
case PrefixByteOperator:
|
||||
return "operator"
|
||||
case PrefixByteServer:
|
||||
return "server"
|
||||
case PrefixByteCluster:
|
||||
return "cluster"
|
||||
case PrefixByteAccount:
|
||||
return "account"
|
||||
case PrefixByteUser:
|
||||
return "user"
|
||||
case PrefixByteSeed:
|
||||
return "seed"
|
||||
case PrefixBytePrivate:
|
||||
return "private"
|
||||
}
|
||||
return "unknown"
|
||||
}
|
Reference in New Issue
Block a user