CN111371562A - 超级账本Fabric-SDK国密算法扩展改造方法 - Google Patents
超级账本Fabric-SDK国密算法扩展改造方法 Download PDFInfo
- Publication number
- CN111371562A CN111371562A CN202010126426.7A CN202010126426A CN111371562A CN 111371562 A CN111371562 A CN 111371562A CN 202010126426 A CN202010126426 A CN 202010126426A CN 111371562 A CN111371562 A CN 111371562A
- Authority
- CN
- China
- Prior art keywords
- fabric
- sdk
- source code
- national secret
- digital signature
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000011426 transformation method Methods 0.000 title claims abstract description 10
- 239000004744 fabric Substances 0.000 claims abstract description 29
- 238000000034 method Methods 0.000 claims abstract description 13
- 230000006870 function Effects 0.000 claims abstract description 7
- 230000000977 initiatory effect Effects 0.000 claims description 5
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 5
- 230000003993 interaction Effects 0.000 description 5
- 230000008520 organization Effects 0.000 description 3
- 238000010960 commercial process Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3263—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明公开了一种超级账本Fabric‑SDK国密算法扩展改造方法,包括步骤:引入基于Fabric‑SDK编程语言实现的国密源代码包到超级账本Fabric‑SDK的项目源码中;使用Fabric‑SDK集成的Fabric‑CA客户端,与Fabric‑CA服务端交互注册的新用户;使用Fabric‑CA客户端与Fabric区块链网络进行账本查询的过程。本发明实现了向国密Fabric‑CA注册新用户,使用国密证书与国密Fabric区块链网络交互的功能,解决了支持国密的业务***无法与支持国密的Fabric区块链网络交互的问题。
Description
技术领域
本发明涉及区块链开源项目超级账本中程序开发工具包Fabric-SDK的国密扩展改造方法,具体是一种对多种编程语言SDK通用的Fabric-SDK的国密扩展改造方法。
背景技术
超级账本Fabric系列组件:超级账本(Hyperledger)是由Linux基金会托管的区块链开发平台项目,Fabric系列子项目超级账本中的核心项目,提供了一个完整的联盟链应用开发平台。Fabric系列项目(组件)中包含Fabric、Fabric-CA、Fabric-SDK等,其中Fabric是该联盟链平台的核心和基础组件,提供了区块链网络节点部署,智能合约运行环境搭建,交易发起和共识、分布式账本维护等区块链网络核心功能。
Fabric-CA为Fabric项目的附属项目,用于替代cryptogen工具,为已经部署运行的Fabric联盟区块链网络动态生成新的组织和用户证书,实现Fabric网络的动态扩容,提升扩展性。Fabric-CA项目由两部分组成,分别是Fabric-CA服务端和Fabric-CA客户端。当Fabric网络中某组织有新用户加入时,该组织管理员可通过Fabric-CA客户端向服务端发起请求登记、注册新用户并获取到相应的用户证书。
国密SM系列算法:国密SM算法即国家密码局认定的国产商用系列密码算法,可以用于完成对称和非对称的加密、解密,数字签名的生成和验证,密钥协商,数字摘要等操作。
在原有的Fabric系列组件中,默认情况下,区块链网络中的散列算法使用SHA256,数字签名使用ECDSA算法,数字证书采用X509格式,并未提供国密算法的支持,不符合区块链平台在监管和可控方面的政策需求。基于此,已有支持国密算法的Fabric组件和Fabric-CA被开发并公布,但不存在支持国密算法的Fabric-SDK组件。这使得支持国密算法的政府或企业业务***无法基于国密算法实现与Fabric联盟区块链网络的交互,严重阻碍了区块链平台的大规模可控的商用进程。
发明内容
本发明的发明目的是为了克服现有技术中的政府或企业业务***无法基于国密算法实现与Fabric联盟区块链网络的交互,严重阻碍了区块链平台的大规模可控商用进程的不足,提供了一种对多种编程语言SDK通用的Fabric-SDK的国密扩展改造方法。
为了实现上述目的,本发明采用以下技术方案:
一种超级账本Fabric-SDK国密算法扩展改造方法,包括以下步骤:
(1)引入基于Fabric-SDK编程语言实现的国密源代码包到超级账本Fabric-SDK的项目源码中;
(2)使用Fabric-SDK集成的Fabric-CA客户端,与Fabric-CA服务端交互注册的新用户:
在新用户注册后,使用国密源代码包生成国密SM2非对称密钥对,用国密SM2非对称密钥对代替项目源码的ECDSA密钥对;
利用国密SM2非对称密钥对,发起PKCS10格式的证书请求,用证书请求代替项目源码中的基于ECDSA的证书请求;
Fabric-CA客户端发送PKCS10格式证书请求至Fabric-CA服务端,Fabric-CA客户端收到的Fabric-CA服务端返回的证书即为基于SM2算法的X509数字证书。
本发明引入Fabric-SDK对应编程语言的国密实现到其源码目录中,并替换原有的SHA256和ECDSA算法调用,实现了向国密Fabric-CA注册新用户,使用国密证书与国密Fabric区块链网络交互的功能,解决了支持国密的业务***无法与支持国密的Fabric区块链网络交互的问题。
作为优选,还包括使用Fabric-CA客户端与Fabric区块链网络进行账本查询的过程,账本查询的过程包括如下步骤:
生成交易Proposal后,使用国密源代码包和SM3算法计算Proposal的摘要值A1,用摘要值A1代替项目源码中的用SHA256计算的摘要值;同时使用国密源代码包中的国密证书和SM2算法生成Proposal的摘要值A2,利用摘要值A2生成Proposal的数字签名C1,利用数字签名代替项目源码中的使用ECDSA计算数字签名;
Fabric-CA客户端将数字签名C1和Proposal一起封装成SignedProposal结构的消息,将SignedProposal结构的消息发送至区块链网络的各背书节点;
Fabric-CA客户端收到各背书节点返回的背书响应后,Fabric-CA客户端将所有背书响应组装为一个交易结构,并使用SM3算法计算Proposal的摘要值A3,利用摘要值A3代替项目源码的使用SHA256计算的摘要值,使用SM2算法和国密源代码包的国密证书计算摘要值A3的数字签名C2,用数字签名C2代替项目源码中的使用ECDSA计算的数字签名;
Fabric-CA客户端将组装好的交易结构和数字签名C2一起封装成Envelope结构的消息,将Envelope结构的消息发送至区块链网络的各个排序节点。
作为优选,所述项目源码具有功能:
随机生成国密SM2非对称密钥对;
使用SM3对任意数据计算数字摘要;
使用给定国密SM2密钥对,生成PKCS10格式的证书请求;
使用给定国密SM2私钥,对任意数据生成数字签名。
作为优选,Fabric-SDK编程语言为Fabric-SDK-Java、Fabric-SDK-Go、Fabric-SDK-Node或Fabric-SDK-Python。
因此,本发明具有如下有益效果:引入Fabric-SDK对应编程语言的国密实现到其源码目录中,并替换原有的SHA256和ECDSA算法调用,实现了向国密Fabric-CA注册新用户,使用国密证书与国密Fabric区块链网络交互的功能,解决了支持国密的业务***无法与支持国密的Fabric区块链网络交互的问题。
附图说明
图1是原始的Fabric-SDK与原始的Fabric-CA服务端交互注册新用户的一种流程图;
图2是本发明的Fabric-SDK与支持国密的Fabric-CA服务端交互注册新用户的一种流程图;
图3是原始的Fabric-SDK与原始的Fabric区块链网络交互发起交易或查询账本的一种流程图;
图4是本发明的Fabric-SDK与支持国密的Fabric区块链网络交互发起交易或查询账本的一种流程图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的描述。
一种超级账本Fabric-SDK国密算法扩展改造方法,对Fabric-SDK进行国密算法扩展改造首先需要实现对应编程语言的国密算法,并将该国密源码导入到Fabric-SDK源代码目录中。如图1和图3所示,根据Fabric-SDK对密码学算法的使用需求,项目源码需要具有如下功能:
1.随机生成国密SM2非对称密钥对;
2.使用SM3对任意数据计算数字摘要;
3.使用给定国密SM2密钥对生成PKCS10格式的证书请求;
4.使用给定国密SM2私钥对任意数据生成数字签名。
另外,通过国密扩展Fabric-SDK使用国密算法与Fabric-CA服务端和Fabric区块链网络进行交互,要求Fabric-CA组件和Fabric组件均支持国密。包括以下步骤:
(1)引入基于Fabric-SDK编程语言实现的国密源代码包到超级账本Fabric-SDK的项目源码中;例如需要改造Fabric-SDK-Java时,可引入bouncycastle的SecurityProvider实现对国密SM系列算法的支持。需要改造Fabric-SDK-Go时,可引入同济区块链研究院开源的国密算法的Go语言实现到Fabric-SDK-Go项目源代码中。其他语言版本的Fabric-SDK同理。具体实施时,也可参照相应国家标准,自己实现国密算法并引入到Fabric-SDK源代码目录中。
如图2所示,(2)使用Fabric-SDK集成的Fabric-CA客户端,与Fabric-CA服务端交互注册的新用户:
在新用户注册后,使用国密源代码包生成国密SM2非对称密钥对,用国密SM2非对称密钥对代替项目源码的ECDSA密钥对;
利用国密SM2非对称密钥对,发起PKCS10格式的证书请求,用证书请求代替项目源码中的基于ECDSA的证书请求;
Fabric-CA客户端发送PKCS10格式证书请求至Fabric-CA服务端,Fabric-CA客户端收到的Fabric-CA服务端返回的证书即为基于SM2算法的X509数字证书。
如图4所示,(3)使用Fabric-CA客户端与Fabric区块链网络进行账本查询的过程,账本查询的过程包括如下步骤:
生成交易Proposal后,使用国密源代码包和SM3算法计算Proposal的摘要值A1,用摘要值A1代替项目源码中的用SHA256计算的摘要值;同时使用国密源代码包中的国密证书和SM2算法生成Proposal的摘要值A2,利用摘要值A2生成Proposal的数字签名C1,利用数字签名代替项目源码中的使用ECDSA计算数字签名;
Fabric-CA客户端将数字签名C1和Proposal一起封装成SignedProposal结构的消息,将SignedProposal结构的消息发送至区块链网络的各背书节点;
Fabric-CA客户端收到各背书节点返回的背书响应后,Fabric-CA客户端将所有背书响应组装为一个交易结构,并使用SM3算法计算Proposal的摘要值A3,利用摘要值A3代替项目源码的使用SHA256计算的摘要值,使用SM2算法和国密源代码包的国密证书计算摘要值A3的数字签名C2,用数字签名C2代替项目源码中的使用ECDSA计算的数字签名;
Fabric-CA客户端将组装好的交易结构和数字签名C2一起封装成Envelope结构的消息,将Envelope结构的消息发送至区块链网络的各个排序节点。
应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
Claims (4)
1.一种超级账本Fabric-SDK国密算法扩展改造方法,其特征是,包括以下步骤:
(1)引入基于Fabric-SDK编程语言实现的国密源代码包到超级账本Fabric-SDK的项目源码中;
(2)使用Fabric-SDK集成的Fabric-CA客户端,与Fabric-CA服务端交互注册的新用户:
在新用户注册后,使用国密源代码包生成国密SM2非对称密钥对,用国密SM2非对称密钥对代替项目源码的ECDSA密钥对;
利用国密SM2非对称密钥对,发起PKCS10格式的证书请求,用证书请求代替项目源码中的基于ECDSA的证书请求;
Fabric-CA客户端发送PKCS10格式证书请求至Fabric-CA服务端,Fabric-CA客户端收到的Fabric-CA服务端返回的证书即为基于SM2算法的X509数字证书。
2.根据权利要求1所述的超级账本Fabric-SDK国密算法扩展改造方法,其特征是,还包括使用Fabric-CA客户端与Fabric区块链网络进行账本查询的过程,账本查询的过程包括如下步骤:
生成交易Proposal后,使用国密源代码包和SM3算法计算Proposal的摘要值A1,用摘要值A1代替项目源码中的用SHA256计算的摘要值;同时使用国密源代码包中的国密证书和SM2算法生成Proposal的摘要值A2,利用摘要值A2生成Proposal的数字签名C1,利用数字签名代替项目源码中的使用ECDSA计算数字签名;
Fabric-CA客户端将数字签名C1和Proposal一起封装成SignedProposal结构的消息,将SignedProposal结构的消息发送至区块链网络的各背书节点;
Fabric-CA客户端收到各背书节点返回的背书响应后,Fabric-CA客户端将所有背书响应组装为一个交易结构,并使用SM3算法计算Proposal的摘要值A3,利用摘要值A3代替项目源码的使用SHA256计算的摘要值,使用SM2算法和国密源代码包的国密证书计算摘要值A3的数字签名C2,用数字签名C2代替项目源码中的使用ECDSA计算的数字签名;
Fabric-CA客户端将组装好的交易结构和数字签名C2一起封装成Envelope结构的消息,将Envelope结构的消息发送至区块链网络的各个排序节点。
3.根据权利要求1所述的超级账本Fabric-SDK国密算法扩展改造方法,其特征是,所述项目源码具有功能:
随机生成国密SM2非对称密钥对;
使用SM3对任意数据计算数字摘要;
使用给定国密SM2密钥对,生成PKCS10格式的证书请求;
使用给定国密SM2私钥,对任意数据生成数字签名。
4.根据权利要求1或2或3所述的超级账本Fabric-SDK国密算法扩展改造方法,其特征是,Fabric-SDK编程语言为Fabric-SDK-Java、Fabric-SDK-Go、Fabric-SDK-Node或Fabric-SDK-Python。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010126426.7A CN111371562A (zh) | 2020-02-27 | 2020-02-27 | 超级账本Fabric-SDK国密算法扩展改造方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010126426.7A CN111371562A (zh) | 2020-02-27 | 2020-02-27 | 超级账本Fabric-SDK国密算法扩展改造方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111371562A true CN111371562A (zh) | 2020-07-03 |
Family
ID=71210051
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010126426.7A Pending CN111371562A (zh) | 2020-02-27 | 2020-02-27 | 超级账本Fabric-SDK国密算法扩展改造方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111371562A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111901335A (zh) * | 2020-07-27 | 2020-11-06 | 浙江永旗区块链科技有限公司 | 基于中台的区块链数据传输管理方法及*** |
CN112737779A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市宝能投资集团有限公司 | 一种密码机服务方法、装置、密码机及存储介质 |
CN113037827A (zh) * | 2021-03-02 | 2021-06-25 | 上海旺链信息科技有限公司 | 基于区块链的投票方法、自组织管理方法及计算机设备 |
CN114205085A (zh) * | 2021-12-03 | 2022-03-18 | 东北大学 | 一种国密SM2的优化处理方法及超级账本fabric平台的改造方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080130895A1 (en) * | 2006-10-25 | 2008-06-05 | Spyrus, Inc. | Method and System for Deploying Advanced Cryptographic Algorithms |
CN110048855A (zh) * | 2019-04-23 | 2019-07-23 | 东软集团股份有限公司 | 国密算法的引入方法及调用方法、及装置、设备、Fabric平台 |
CN110070362A (zh) * | 2019-05-05 | 2019-07-30 | 北京共识数信科技有限公司 | 一种使用国密算法的金融行业区块链交易*** |
-
2020
- 2020-02-27 CN CN202010126426.7A patent/CN111371562A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080130895A1 (en) * | 2006-10-25 | 2008-06-05 | Spyrus, Inc. | Method and System for Deploying Advanced Cryptographic Algorithms |
CN110048855A (zh) * | 2019-04-23 | 2019-07-23 | 东软集团股份有限公司 | 国密算法的引入方法及调用方法、及装置、设备、Fabric平台 |
CN110070362A (zh) * | 2019-05-05 | 2019-07-30 | 北京共识数信科技有限公司 | 一种使用国密算法的金融行业区块链交易*** |
Non-Patent Citations (1)
Title |
---|
张青禾: "区块链中的身份识别和访问控制技术研究" * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111901335A (zh) * | 2020-07-27 | 2020-11-06 | 浙江永旗区块链科技有限公司 | 基于中台的区块链数据传输管理方法及*** |
CN111901335B (zh) * | 2020-07-27 | 2022-08-30 | 浙江永旗区块链科技有限公司 | 基于中台的区块链数据传输管理方法及*** |
CN112737779A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市宝能投资集团有限公司 | 一种密码机服务方法、装置、密码机及存储介质 |
CN113037827A (zh) * | 2021-03-02 | 2021-06-25 | 上海旺链信息科技有限公司 | 基于区块链的投票方法、自组织管理方法及计算机设备 |
CN113037827B (zh) * | 2021-03-02 | 2023-04-07 | 上海旺链信息科技有限公司 | 基于区块链的投票方法、自组织管理方法及计算机设备 |
CN114205085A (zh) * | 2021-12-03 | 2022-03-18 | 东北大学 | 一种国密SM2的优化处理方法及超级账本fabric平台的改造方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111371562A (zh) | 超级账本Fabric-SDK国密算法扩展改造方法 | |
US11171789B2 (en) | System and method for implementing a resolver service for decentralized identifiers | |
CN110602138B (zh) | 区块链网络的数据处理方法、装置、电子设备及存储介质 | |
CN110912706B (zh) | 一种基于身份的动态数据完整性审计方法 | |
Omar et al. | Identity management in IoT networks using blockchain and smart contracts | |
AU2007240567B2 (en) | Peer-to-peer contact exchange | |
Kohl et al. | The evolution of the Kerberos authentication service | |
CN112737779B (zh) | 一种密码机服务方法、装置、密码机及存储介质 | |
US20110035582A1 (en) | Network authentication service system and method | |
CN102404347A (zh) | 一种基于公钥基础设施的移动互联网接入认证方法 | |
CN112686668A (zh) | 联盟链跨链***及方法 | |
CN107251518B (zh) | 用于中立应用程序编程接口的***和方法 | |
CN111464315B (zh) | 数字签名处理方法、装置、计算机设备以及存储介质 | |
CN113541970B (zh) | 分布式标识符的使用方法和分布式标识符使用*** | |
CN108900309B (zh) | 一种鉴权方法及鉴权*** | |
CN115442047A (zh) | 一种业务管理文件的电子签章方法及*** | |
CN112804356A (zh) | 一种基于区块链的联网设备监管认证方法及*** | |
CN113472783B (zh) | 区块链密码证书服务方法、***、存储介质及装置 | |
CN103425939A (zh) | 一种sm3算法在java环境中的实现方法及*** | |
CN110266478B (zh) | 一种信息处理方法、电子设备 | |
CN111553686A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN114978698A (zh) | 网络接入方法、目标终端、凭证管理网元及验证网元 | |
JP2019102959A (ja) | サーバ装置、通信装置、鍵共有システム、鍵共有方法、及びプログラム | |
CN107801186A (zh) | 一种集群通信***中非接入层摘要鉴权方法 | |
CN112184440A (zh) | 数据处理方法、装置、节点设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200703 |
|
RJ01 | Rejection of invention patent application after publication |