【Proverif语法学习(一)】

1.声明(declaration)

1.1 声明变量

格式:type t.

free n:t. 表示n的类型是tfree是关键词,表示公开的,是可以被攻击者获取的。
如果不想被攻击者获取,则需要声明为私密的,关键词为private,格式如下:
free n:t [private].

1.2 声明函数

格式:fun f(t1,…,tn):t.

f是关于n的函数构造器,t是该函数f的返回值类型,t1…tn是函数f的自变量。
fun f(t1,…,tn):t [private]. 表示攻击者无法获取由函数f生成的t。**
fun senc(bitstring, key):bitstring.** 表示用类型key加密bitstring类型明文,生成的密文是bitstring类型值。

1.3 析构函数

格式: reduc forall x1,1 : t1,1,…,x1,n1 : t1,n1;g(M1,1,…,M1,k)=M1,0;

forall xm,1 : tm,1,…,xm,nm : tm,nm; g(Mm,1,…,Mm,k)=Mm,0.

作用:将密码学原语中的关系连接起来。
例子:reduc forall m : bitstring, k : key; sedc(senc(m,k),k) = m.
m表示明文;k表示系统密钥;senc(m,k) 用密钥 k加密明文m生成密文;sedc(senc(m,k),k)=m用密钥k解密密文senc(m,k)生成明文m

1.4 子进程

格式:let R(x1 : t1,…,xn : tn) = P.

R是宏**(macros)**的名字,P是定义的子进程,t1,…,tn类型x1,…,xn。

1.5 主进程

格式:process A

process是关键字,相当于编程语言中的main()函数。

1.6 术语语法

假设M和N都是多项式表达式;

格式:**M = N **表示M和N相等;M<>N表示M和N不相等。
等式和不等式都是一个等式理论的模,它们接受相同类型的两个参数,并返回bool类型的结果。

格式:M&&N表示M和N是布尔连接的;M || N表示M和N是非布尔连接即布尔断开。

格式:**not(M)**表示布尔否定

例子:M || N,如果M是真的,那么N不需要计算,这个表达式的结果是真的。

1.7 进程语法

假设P和Q都是进程;

格式:P | Q表示进程P和Q是并行组成的;!P表示P | P | …,表示进程P有无限个。

格式:new n : t; P 表示在进程P中绑定类型为t的n,相当于编程语言中在类中(或函数)设置新的局部变量

格式:in(M, x : t); P表示等待来自通道M的类型为t的消息,然后表现为P,其中接收的消息绑定到变量x,P中每次出现x都是指收到的消息,当P为0时,P可以省略不写。

格式:out(M, N); P表示在通道M发送N,然后运行进程P,当P为0时,P可以省略不写。

格式:if M then P else Q表示当M的值为真时,运行进程P;当M的值为其他值时,运行进程Q。当术语M失败时它不执行任何操作(例如,当M包含不适用重写规则的析构函数时)。

例子1:if M=N then P else Q表示如果M=N,执行P,或者执行Q
例子2:if x=M then P else Q表示如果对于M中的所有析构函数没有失败,那么x被绑定到M中,并执行P,否则执行Q。

术语和语法

1.8 模式匹配语法

模式匹配语法

格式:x : t表示将类型t的任何术语绑定到x。
格式:M = N表示相等测试。

1.9 关键词、注释和标识符

关键词:among, channel, choice, clauses, const, def, elimtrue, else, equation, equivalence, event, expand, fail, forall, free, fun, get, if, in, inj-event, insert, let, letfun, new, noninterf, not, nounif, or, otherwise, out, param, phase, pred, proba, process, proof, putbegin, query, reduc, set, suchthat, table, then, type, weaksecret, yield。

注释:用英文括号加星号组成,将星号放在括号内;
标识符:包括字母、数字、单引号、下划线等,第一个字符是字母,区分大小写,关键词不可做标识符。
内置类型:bitsring, bool。bool类型分为true和false。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于上面的引用内容,golang的基础语法学习可以参考以下几个步骤: 1. 首先,我们需要安装golang的开发环境。你可以直接进入官网(https://go.dev/)下载并安装golang的解释器。 2. 接下来,我们可以开始学习golang的语法。从上面的引用内容可以看出,golang的语法和Java的结构很相似,所以如果你之前有Java编程的经验,可以借鉴一些类比来学习。但是即使你没有Java的经验,也不用担心,golang的语法相对简单并且易于学习。 3. 另外,golang被称为“云计算时代的开发利器”,在使用过程中给人一种优雅、亲切、舒适的感觉。因此,在学习golang的过程中,你可能会发现它的语法设计和使用方式非常人性化。 综上所述,学习golang的基础语法可以通过安装开发环境、参考Java的结构以及体验其优雅、亲切、舒适的特点来进行。希望这些信息能够帮助你开始学习golang的基础语法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一文看完golang基础语法](https://blog.csdn.net/qq_35889508/article/details/128125279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值