code: def auth_send(self):
          
          assert len(self.packets) == 2
          packet = Packet(exchange_type=const.ExchangeType.IKE_AUTH, iSPI=self.iSPI, rSPI=self.rSPI)
  
          # Add IDi (35)
          id_payload = payloads.IDi()
          packet.add_payload(id_payload)
  
          # Add AUTH (39)
          signed_octets = bytes(self.packets[0]) + self.Nr + prf(self.SK_pi, id_payload._data)
          packet.add_payload(payloads.AUTH(signed_octets))
  
          # Add SA (33)
          self.esp_SPIout = int.from_bytes(os.urandom(4), 'big')
          packet.add_payload(payloads.SA(proposals=[
              proposal.Proposal(protocol=const.ProtocolID.ESP, spi=self.esp_SPIout, last=True, transforms=[
                  ('ENCR_CAMELLIA_CBC', 256), ('ESN',), ('AUTH_HMAC_SHA2_256_128',)
              ])
          ]))
  
          # Add TSi (44)
          packet.add_payload(payloads.TSi(addr=self.address))
  
          # Add TSr (45)
          packet.add_payload(payloads.TSr(addr=self.peer))
  
          # Add N(INITIAL_CONTACT)
          packet.add_payload(payloads.Notify(notify_type=const.MessageType.INITIAL_CONTACT))
  
          self.packets.append(packet)
          self.state = State.AUTH
  
          return self.encrypt_and_hmac(packet)
docs: Generates the second (IKE_AUTH) packet for Initiator
  
          :return: bytes() containing a valid IKE_INIT packet