前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >国密SM9算法C++实现(Linux)

国密SM9算法C++实现(Linux)

作者头像
墨文
发布于 2020-02-28 07:43:23
发布于 2020-02-28 07:43:23
1.6K00
代码可运行
举报
文章被收录于专栏:m0w3nm0w3n
运行总次数:0
代码可运行

首先参考 Linux下编译并使用miracl密码库 该博文在linux下编译Miracl库。

编译完了,自然是要用的,下面介绍两种在C程序中使用miracl库的方法。

方法一:

1、 源码编译完后的必需的文件是两个头文件miracl.h和mirdef.h以及编译后的静态函数库miracl.a,需要在自己写的C程序中使用。

2、 输入如下代码,命名为main.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir miracl-test
cd miracl-test
nano main.c
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "miracl.h"

void main()
{
big a, b, c;
miracl *mip = mirsys(5000, 16);
a=mirvar(8);
b=mirvar(7);
c=mirvar(0);
add(a, b, c);
cotnum(c, stdout);
}

将miracl.a, miracl.h, mirdef.h拷贝到与main.c所在目录,浏览一下当前项目目录下的文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp ../miracl/miracl.a miracl.a
cp ../miracl/miracl.h miracl.h
cp ../miracl/mirdef.h mirdef.h
ls

3、 gcc编译并输出main执行程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gcc main.c miracl.a -o main
./main

方法二:

1、 将miracl.a放在系统对应的/usr/lib

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp /miracl/miracl.a /usr/lib/libmiracl.a

2、 在/usr/include下面建立文件夹miracl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir /usr/include/miracl

3、 将miracl下的所有头文件拷贝到/usr/include/miracl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp ./miracl/*.h /usr/include/miracl

4、 调用miracl时便可直接在自己的程序头文件中加入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <miracl/miracl.h>

使用方法一中的例子,即将main.c中的第一行改为include

5、 gcc编译并输出main执行程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gcc main.c -lmiracl -o main
./main

linux64编译代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm *.exe
rm miracl.a
cp mirdef.h64 mirdef.h
gcc -c -m64 -O2 mrcore.c
gcc -c -m64 -O2 mrarth0.c
gcc -c -m64 -O2 mrarth1.c
gcc -c -m64 -O2 mrarth2.c
gcc -c -m64 -O2 mralloc.c
gcc -c -m64 -O2 mrsmall.c
gcc -c -m64 -O2 mrio1.c
gcc -c -m64 -O2 mrio2.c
gcc -c -m64 -O2 mrgcd.c
gcc -c -m64 -O2 mrjack.c
gcc -c -m64 -O2 mrxgcd.c
gcc -c -m64 -O2 mrarth3.c
gcc -c -m64 -O2 mrbits.c
gcc -c -m64 -O2 mrrand.c
gcc -c -m64 -O2 mrprime.c
gcc -c -m64 -O2 mrcrt.c
gcc -c -m64 -O2 mrscrt.c
gcc -c -m64 -O2 mrmonty.c
gcc -c -m64 -O2 mrpower.c
gcc -c -m64 -O2 mrsroot.c
gcc -c -m64 -O2 mrcurve.c
gcc -c -m64 -O2 mrfast.c
gcc -c -m64 -O2 mrshs.c
gcc -c -m64 -O2 mrshs256.c
gcc -c -m64 -O2 mrshs512.c
gcc -c -m64 -O2 mrsha3.c
gcc -c -m64 -O2 mrfpe.c
gcc -c -m64 -O2 mraes.c
gcc -c -m64 -O2 mrgcm.c
gcc -c -m64 -O2 mrlucas.c
gcc -c -m64 -O2 mrzzn2.c
gcc -c -m64 -O2 mrzzn2b.c
gcc -c -m64 -O2 mrzzn3.c
gcc -c -m64 -O2 mrzzn4.c
gcc -c -m64 -O2 mrecn2.c
gcc -c -m64 -O2 mrstrong.c
gcc -c -m64 -O2 mrbrick.c
gcc -c -m64 -O2 mrebrick.c
gcc -c -m64 -O2 mrec2m.c
gcc -c -m64 -O2 mrgf2m.c
gcc -c -m64 -O2 mrflash.c
gcc -c -m64 -O2 mrfrnd.c
gcc -c -m64 -O2 mrdouble.c
gcc -c -m64 -O2 mrround.c
gcc -c -m64 -O2 mrbuild.c
gcc -c -m64 -O2 mrflsh1.c
gcc -c -m64 -O2 mrpi.c
gcc -c -m64 -O2 mrflsh2.c
gcc -c -m64 -O2 mrflsh3.c
gcc -c -m64 -O2 mrflsh4.c
cp mrmuldv.g64 mrmuldv.c
gcc -c -m64 -O2 mrmuldv.c
ar rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o mrzzn2.o mrzzn3.o
ar r miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrbits.o mrecn2.o mrzzn4.o
ar r miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o mrsroot.o mrzzn2b.o
ar r miracl.a mrpower.o mrfast.o mrshs.o mrshs256.o mraes.o mrlucas.o mrstrong.o mrgcm.o    
ar r miracl.a mrflash.o mrfrnd.o mrdouble.o mrround.o mrbuild.o
ar r miracl.a mrflsh1.o mrpi.o mrflsh2.o mrflsh3.o mrflsh4.o 
ar r miracl.a mrbrick.o mrebrick.o mrec2m.o mrgf2m.o mrmuldv.o mrshs512.o mrsha3.o mrfpe.o
rm mr*.o
gcc -m64 -O2 bmark.c miracl.a -o bmark
gcc -m64 -O2 fact.c miracl.a -o fact
g++ -c -m64 -O2 big.cpp
g++ -c -m64 -O2 zzn.cpp
g++ -c -m64 -O2 ecn.cpp
g++ -c -m64 -O2 ec2.cpp
g++ -c -m64 -O2 crt.cpp
g++ -m64 -O2 mersenne.cpp big.o miracl.a -o mersenne
g++ -m64 -O2 brent.cpp big.o zzn.o miracl.a -o brent
g++ -c -m64 -O2 flash.cpp

g++ -std=c++11 -m64 -O2 -c YHex.cpp -o YHex.o
g++ -std=c++11 -m64 -O2 -c YHashEngine.cpp YHex.o -o YHashEngine.o
g++ -std=c++11 -m64 -O2 -c YSM3.cpp YHashEngine.o -o YSM3.o
g++ -std=c++11 -m64 -O2 -c Base.cpp YSM3.o -o Base.o
Parameters
g++ -std=c++11 -m64 -O2 -c KGC.cpp YSM3.o YHex.o -o KGC.o
g++ -std=c++11 -m64 -O2 -c zzn12.cpp -o zzn12.o
g++ -std=c++11 -m64 -O2 -c YSM4.cpp -o YSM4.o

g++ -m64 -O2 SM9Demo.cpp ecn.o big.o miracl.a -o pk-demo 

https://blog.csdn.net/qq_33249383/article/details/88908425

https://blog.csdn.net/qq_42533853/article/details/88551757

https://blog.csdn.net/zahuopuboss/article/details/39368817

https://www.cnblogs.com/52php/p/5681711.html

代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
使用snakemake编写生信分析流程
The Snakemake workflow management system is a tool to create reproducible and scalable data analyses. Workflows are described via a human readable, Python based language. They can be seamlessly scaled to server, cluster, grid and cloud environments, without the need to modify the workflow definition. Finally, Snakemake workflows can entail a description of required software, which will be automatically deployed to any execution environment.
生信探索
2023/05/23
9020
Sentieon | 应用教程:Sentieon分布模式
本文档描述了如何利用Sentieon®基因组学工具的分片能力将DNAseq®流程分布到多台服务器上;将其他流程(如TNseq®)进行分布遵循相同原则,因为所有Sentieon®基因组学工具都具有相同的内置分布式处理能力。这种分布的目标是为了减少流程的总运行时间,以更快地生成结果;然而,这种分布也会带来一些额外的开销,使计算成本增加。 利用分布能力,流程的每个阶段被分成小任务;每个任务处理基因组的一部分,并可以在不同的服务器上并行运行。每个任务生成一个部分结果,需要按顺序合并为最终的单一输出;这种合并需要仔细进行,以确保考虑到边界并生成与没有分片运行的流程相同的结果。 分布的执行框架不在本文档的范围内,用户需要在保持正确的数据依赖关系的同时,分发数据/文件并启动正确的进程。
INSVAST
2024/07/15
810
Sentieon | 应用教程:Sentieon分布模式
workflow05-snakemake的进阶操作一
如bwa 等软件,我们可以分配多线程以提高任务的执行速度的。同样,我们可以把线程的信息配置在规则中:
北野茶缸子
2022/07/07
9990
Snakemake — 可重复数据分析框架
Snakemake是一款流行的生物信息学工作流管理系统,由Johannes Köster及其团队开发。它旨在降低复杂数据分析的复杂性,使生物信息学工作流的创建和执行变得更加容易和可重复。Snakemake的设计灵感来自于Makefile,但它是专门为生物信息学和数据密集型科学工作流设计的,使用Python语言进行工作流的定义,这使得它在生物信息学社区中特别受欢迎。
生信菜鸟团
2024/03/25
8290
Snakemake — 可重复数据分析框架
workflow02-可视化展示snakemake流程
对于工作流来说,Directed acyclic graph,有向非循环图是一个非常不错的展示的策略。
北野茶缸子
2022/07/07
8980
workflow02-可视化展示snakemake流程
生信分析流程构建的几大流派
构建生信分析流程是生物信息学从业人员必备的技能之一,对该项能力的评估常常是各大公司招录人员的参考项目之一。
生信技能树
2018/12/18
4.9K0
生信分析流程构建的几大流派
GATK变异检测
准备的已知变异集作为训练集,可以是 Hapmap、OMNI,1000G,dbsnp,瓶中基因组计划等这些国际性项目的数据,然后利用训练集对每一个位点进行过滤。利用 VariantRecalibrator工具进行机器学习,ApplyVQSR 工具进行处理。VQSR 过滤 SNP 和 InDel 分别进行,首先处理 SNP,得到结果后,再进行 InDel 处理。
生信喵实验柴
2023/09/04
5740
GATK变异检测
snakemake杂记:多个转录组比对到多个基因组得到多个bam文件然后合并
我有10个基因组,然后又12个转录组数据,然后将这个12个基因组数据分别比对到这个10个基因组,每个基因组得到12个bam文件,然后将每个基因组的12个bam文件合并 ,最终得到10个合并的bam文件
用户7010445
2023/08/23
3110
snakemake杂记:多个转录组比对到多个基因组得到多个bam文件然后合并
workflow04-用snakemake处理复杂命名
但通常来说,测序文件也会对应一些metadata。比如通过ENA 下载测序数据,就可以选择需要的信息:
北野茶缸子
2022/07/07
1.2K0
workflow04-用snakemake处理复杂命名
大肠杆菌全基因组重测序变异检测小实例(侧重变异过滤)
未找到原文所用数据,本文使用GATK4.0和全基因组数据分析实践(上)文章中的大肠杆菌基因组作为参考序列,使用wgsim软件模拟生成双端150bp测序数据
用户7010445
2020/03/03
1.8K0
一步一步用Snakemake搭建gatk4生成正常样本的germline突变数据库的流程
这是使用gatk4生成正常样本的germline突变数据库的流程图,整个流程是用Snakemake写的,这个图片也是Snakemake生成的。然后就被jimmy大佬点名了,受宠若惊,所以就有了本文。我是2016年从转录组学习小分队开始正式接触生信技能树,并走上了生信工程师的道路,我被jimmy大佬无私奉献的精神所折服,借此机会表示对jimmy大佬和生信技能树由衷的感谢!如果你也想从转录组开启你的生物信息学学习之旅,不妨考虑一下生信技能树的爆款入门:生信爆款入门-全球听(买一得五)(第4期),你的生物信息学入门课!
生信技能树
2020/04/27
3.2K0
全基因组 - 人类基因组变异分析(PacBio) -- minimap2 + Sniffles2
首先从github官网上下载minimap2的二进制文件压缩包,minimap2-2.26_x64-linux.tar.bz2,然后上传到服务器上。
三代测序说
2023/11/26
1.6K0
全基因组 -  人类基因组变异分析(PacBio) -- minimap2 + Sniffles2
【直播】我的基因组 43:简单粗糙的WGS数据分析流程
前面我们扯到bam文件的各种操作,vcf文件的各种操作,基础知识不牢固的同学可能已经云里雾里了。这次我们来讲一个简单的。就是拿到了fastq的测序数据,如何把全基因组分析给跑一遍。(不谈细节!) 首先就是fastq文件比对到参考基因组变成sam文件: head -40 read1.fq >tmp/read1.fq head -40 read2.fq >tmp/read2.fq ~/biosoft/bwa/bwa-0.7.15/bwa mem -t 20 -M ~/reference/index/bwa/
生信技能树
2018/03/08
1.9K0
【直播】我的基因组 43:简单粗糙的WGS数据分析流程
workflow01-初探snakemake
我自己一直在寻求可以将不同的工作流串接的方式。之前尝试了nextflow,但发现语法让我头疼。无奈发现了基于python 框架的snakemake,如释重负,立马学一下。
北野茶缸子
2022/07/07
1.6K0
workflow01-初探snakemake
GATK最佳实践之数据预处理SnakeMake流程
写的数据预处理snakemake流程其实包括在每个单独的分析中比如种系遗传变异和肿瘤变异流程中,这里单独拿出来做演示用,因为数据预处理是通用的,在call变异之前需要处理好数据。
生信探索
2023/05/27
4500
01.GATK肿瘤基因变异最佳实践SnakeMake流程:WorkFlow简介
GATK best practices workflow Pipeline summary
生信探索
2023/05/29
3510
流程管理工具snakemake学习笔记杂记
这里rule all的作用还是没有搞明白,看有的文档说是最终保留的文件 ,我这里rule all 只写了了最终的html和json,但是最终的结果里是有过滤后的fastq文件的
用户7010445
2022/05/23
9520
流程管理工具snakemake学习笔记杂记
Snakemake+RMarkdown定制你的分析流程和报告
数字游民第三波有你吗 https://mp.weixin.qq.com/s/q864LQvsOOmd9nUyxk939w
生信技能树
2022/06/27
3.4K1
Snakemake+RMarkdown定制你的分析流程和报告
snakemake 学习笔记2
这里, 我们新建两个配对的RNA-seq数据, 格式是FASTQ的文件, 然后经过下面两步处理:
邓飞
2019/07/07
1.3K0
snakemake 学习笔记2
参考基因组没有,经费也没那么多,怎么办?
尽管目前已经有大量物种基因组释放出来,但还是存在许多物种是没有参考基因组。使用基于酶切的二代测序技术,如RAD-seq,GBS,构建遗传图谱是研究无参考物种比较常用的方法。Stacks就是目前比较通用的分析流程,能用来构建遗传图谱,处理群体遗传学,构建进化发育树。 这篇教程主要介绍如何使用Stacks分析基于酶切的二代测序结果,比如说等RAD-seq,分析步骤为环境准备,原始数据质量评估, 多标记数据分离,序列比对(无参则需要进行contig de novo 组装),RAD位点组装和基因分型,以及后续的标记
生信技能树
2018/03/05
2.3K0
参考基因组没有,经费也没那么多,怎么办?
推荐阅读
相关推荐
使用snakemake编写生信分析流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档