| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package bcrypt |
| |
| import ( |
| "encoding/base64" |
| "os" |
| ) |
| |
| const alphabet = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" |
| |
| var bcEncoding = base64.NewEncoding(alphabet) |
| |
| func base64Encode(src []byte) []byte { |
| n := bcEncoding.EncodedLen(len(src)) |
| dst := make([]byte, n) |
| bcEncoding.Encode(dst, src) |
| for dst[n-1] == '=' { |
| n-- |
| } |
| return dst[:n] |
| } |
| |
| func base64Decode(src []byte) ([]byte, os.Error) { |
| numOfEquals := 4 - (len(src) % 4) |
| for i := 0; i < numOfEquals; i++ { |
| src = append(src, '=') |
| } |
| |
| dst := make([]byte, bcEncoding.DecodedLen(len(src))) |
| n, err := bcEncoding.Decode(dst, src) |
| if err != nil { |
| return nil, err |
| } |
| return dst[:n], nil |
| } |