c/openssl: rand
This commit is contained in:
18
c/openssl/_demo/cmd5demo/md5.go
Normal file
18
c/openssl/_demo/cmd5demo/md5.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c/openssl"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var md5 openssl.MD5_CTX
|
||||
var h = make([]byte, openssl.MD5_LBLOCK)
|
||||
md5.Init()
|
||||
md5.UpdateString("The fog is getting thicker!")
|
||||
md5.UpdateString("And Leon's getting laaarger!")
|
||||
md5.Final(unsafe.SliceData(h))
|
||||
fmt.Printf("%x", h)
|
||||
}
|
||||
17
c/openssl/_demo/cranddemo/rand.go
Normal file
17
c/openssl/_demo/cranddemo/rand.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/goplus/llgo/c/openssl"
|
||||
)
|
||||
|
||||
func main() {
|
||||
b := make([]byte, 10)
|
||||
|
||||
openssl.RANDBytes(b)
|
||||
fmt.Printf("%x\n", b)
|
||||
|
||||
openssl.RANDPrivBytes(b)
|
||||
fmt.Printf("%x\n", b)
|
||||
}
|
||||
68
c/openssl/_demo/cshademo/sha.go
Normal file
68
c/openssl/_demo/cshademo/sha.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c/openssl"
|
||||
)
|
||||
|
||||
func main() {
|
||||
str := "His money is twice tainted:"
|
||||
|
||||
var sha1 openssl.SHA_CTX
|
||||
sha1.Init()
|
||||
sha1.UpdateString(str)
|
||||
|
||||
h1 := make([]byte, openssl.SHA_DIGEST_LENGTH)
|
||||
sha1.Final(unsafe.SliceData(h1))
|
||||
fmt.Printf("%x\n", h1)
|
||||
|
||||
h2 := make([]byte, openssl.SHA_DIGEST_LENGTH)
|
||||
openssl.SHA1String(str, unsafe.SliceData(h2))
|
||||
fmt.Printf("%x\n", h2)
|
||||
|
||||
var sha256 openssl.SHA256_CTX
|
||||
sha256.Init()
|
||||
sha256.UpdateString(str)
|
||||
h3 := make([]byte, openssl.SHA256_DIGEST_LENGTH)
|
||||
sha256.Final(unsafe.SliceData(h3))
|
||||
fmt.Printf("%x\n", h3)
|
||||
|
||||
h4 := make([]byte, openssl.SHA256_DIGEST_LENGTH)
|
||||
openssl.SHA256String(str, unsafe.SliceData(h4))
|
||||
fmt.Printf("%x\n", h4)
|
||||
|
||||
var sha512 openssl.SHA512_CTX
|
||||
sha512.Init()
|
||||
sha512.UpdateString("His money is twice tainted:")
|
||||
|
||||
h5 := make([]byte, openssl.SHA512_DIGEST_LENGTH)
|
||||
sha512.Final(unsafe.SliceData(h5))
|
||||
fmt.Printf("%x\n", h5)
|
||||
|
||||
h6 := make([]byte, openssl.SHA512_DIGEST_LENGTH)
|
||||
openssl.SHA512String(str, unsafe.SliceData(h6))
|
||||
fmt.Printf("%x\n", h6)
|
||||
|
||||
var sha224 openssl.SHA224_CTX
|
||||
sha224.Init()
|
||||
sha224.UpdateString(str)
|
||||
|
||||
h7 := make([]byte, openssl.SHA224_DIGEST_LENGTH)
|
||||
sha224.Final(unsafe.SliceData(h7))
|
||||
fmt.Printf("%x\n", h7)
|
||||
h8 := make([]byte, openssl.SHA224_DIGEST_LENGTH)
|
||||
openssl.SHA224String(str, unsafe.SliceData(h8))
|
||||
fmt.Printf("%x\n", h8)
|
||||
|
||||
var sha384 openssl.SHA384_CTX
|
||||
sha384.Init()
|
||||
sha384.UpdateString(str)
|
||||
h9 := make([]byte, openssl.SHA384_DIGEST_LENGTH)
|
||||
sha384.Final(unsafe.SliceData(h9))
|
||||
fmt.Printf("%x\n", h9)
|
||||
h10 := make([]byte, openssl.SHA384_DIGEST_LENGTH)
|
||||
openssl.SHA384String(str, unsafe.SliceData(h10))
|
||||
fmt.Printf("%x\n", h10)
|
||||
}
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package openssl
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
const (
|
||||
LLGoPackage = "link: $(pkg-config --libs openssl); -lssl -lcrypto"
|
||||
)
|
||||
|
||||
80
c/openssl/rand.go
Normal file
80
c/openssl/rand.go
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The GoPlus Authors (goplus.org). All rights reserved.
|
||||
*
|
||||
* 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 openssl
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c"
|
||||
)
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// int RAND_bytes(unsigned char *buf, int num);
|
||||
//
|
||||
//go:linkname RANDBufferWithLen C.RAND_bytes
|
||||
func RANDBufferWithLen(buf *byte, num c.Int) c.Int
|
||||
|
||||
func RANDBytes(buf []byte) c.Int {
|
||||
return RANDBufferWithLen(unsafe.SliceData(buf), c.Int(len(buf)))
|
||||
}
|
||||
|
||||
// int RAND_priv_bytes(unsigned char *buf, int num);
|
||||
//
|
||||
//go:linkname RANDPrivBufferWithLen C.RAND_priv_bytes
|
||||
func RANDPrivBufferWithLen(buf *byte, num c.Int) c.Int
|
||||
|
||||
func RANDPrivBytes(buf []byte) c.Int {
|
||||
return RANDPrivBufferWithLen(unsafe.SliceData(buf), c.Int(len(buf)))
|
||||
}
|
||||
|
||||
// void RAND_seed(const void *buf, int num);
|
||||
//
|
||||
//go:linkname RANDSeed C.RAND_seed
|
||||
func RANDSeed(buf unsafe.Pointer, num c.Int)
|
||||
|
||||
// void RAND_keep_random_devices_open(int keep);
|
||||
//
|
||||
//go:linkname RANDKeepRandomDevicesOpen C.RAND_keep_random_devices_open
|
||||
func RANDKeepRandomDevicesOpen(keep c.Int)
|
||||
|
||||
// int RAND_load_file(const char *file, long max_bytes);
|
||||
//
|
||||
//go:linkname RANDLoadFile C.RAND_load_file
|
||||
func RANDLoadFile(file *c.Char, maxBytes c.Long) c.Int
|
||||
|
||||
// int RAND_write_file(const char *file);
|
||||
//
|
||||
//go:linkname RANDWriteFile C.RAND_write_file
|
||||
func RANDWriteFile(file *c.Char) c.Int
|
||||
|
||||
// const char *RAND_file_name(char *file, size_t num);
|
||||
//
|
||||
//go:linkname RANDFileName C.RAND_file_name
|
||||
func RANDFileName(file *c.Char, num uintptr) *c.Char
|
||||
|
||||
// int RAND_status(void);
|
||||
//
|
||||
//go:linkname RANDStatus C.RAND_status
|
||||
func RANDStatus() c.Int
|
||||
|
||||
// int RAND_poll(void);
|
||||
//
|
||||
//go:linkname RANDPoll C.RAND_poll
|
||||
func RANDPoll() c.Int
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user